RESTful API, включающий дополнительные поля

#rest #restful-url

Вопрос:

Я разрабатываю RESTful API.

Вот базовый API ПОЛУЧЕНИЯ ресурсов для пользователей.

ПОЛУЧИТЬ /пользователи

 [
  {
    "id": 1,
    "name": "John doe"
  },
  {
    "id": 2,
    "name": "Jane doe"
  }
]
 

Однако иногда мне нужно добавить дополнительное поле в ответ. Например, в некоторых ситуациях следует добавить возраст(не в таблице пользователей).

ПОЛУЧИТЬ /пользователи?возраст=истина ???

 [
  {
    "id": 1,
    "name": "John doe",
    "age": 28
  },
  {
    "id": 2,
    "name": "Jane doe",
    "age": 24
  }
]
 

Существуют ли какие-либо рекомендации RESTful API для этого случая?

Комментарии:

1. Общее руководство HTTP заключается в том, что если вам нужны 2 разных ответа на GET запрос, то либо URL должен отличаться, либо вы должны использовать отрицание содержимого ( Accept* заголовки).

Ответ №1:

Существуют ли какие-либо рекомендации RESTful API для этого случая?

Не совсем так — то, что вы предлагаете, прекрасно.

REST не накладывает никаких ограничений на (а) какую информацию вы включаете в представления своих ресурсов или (б) какие правила правописания вы используете для своих идентификаторов.

Возможно, вам захочется рассмотреть возможность использования идентификатора на более высоком уровне абстракции, а не пытаться перечислить всю вашу коллекцию полей в идентификаторе.

Интерфейс REST разработан таким образом, чтобы быть эффективным для передачи данных гипермедиа большого размера, оптимизируясь для общего случая Интернета, но приводя к интерфейсу, который не является оптимальным для других форм архитектурного взаимодействия. — Филдинг, 2000

Это часто означает, что вам лучше использовать один ресурс, который может использовать множество разных клиентов, вместо того, чтобы пытаться поддерживать множество различных меньших «более эффективных» ресурсов.

Один случай, когда вам понадобилось бы много меньших ресурсов: когда наличие/отсутствие разных полей влияет на то, кому разрешен доступ к ресурсу.