Инициализация и существование конечных точек для API - PullRequest
0 голосов
/ 23 января 2019

Требования

  • Способ проверить, существует ли отчет
  • Способ инициализации нового отчета (клиент не знает о представлении)
  • Способ получить отчет

Примечание: отчет либо существует, либо его нет, и никогда не бывает более одного

Идея 1

  • GET /account/{id}/report
    • 404 если отчет не существует
    • 200 если отчет существует

а как инициализировать? POST ing или PUT вывод пустого тела в конечную точку кажется неправильным (POST, потому что мы знаем, где находится ресурс; PUT, потому что мы не хотим, чтобы там было ничего), но, возможно, это только я. Альтернативой может быть GET /account/{id}/report/init.

Идея 2

  • GET /account/{id}/report
    • 200 если отчет существует; отчет о возврате
    • 200 если отчет не существует; инициализировать и вернуть отчет

Но как проверить, существует ли отчет?

Вопрос

Оба моих подхода терпят неудачу по-разному. Каков будет подходящий подход к выполнению требований при соблюдении принципов REST?

1 Ответ

0 голосов
/ 23 января 2019

Каков будет подходящий подход к выполнению требований при соблюдении принципов REST?

REST не имеет значения, какое написание используется для идентификаторов ресурсов.

Есть две вещи, которые вы должны иметь в виду.Во-первых, эталонное приложение для архитектурного стиля REST - это всемирная паутина, которая прекрасно справляется только с GET и POST.Во-вторых, что кэширование является важной частью этой истории.

В HTTP, когда сервер возвращает код состояния без ошибок в ответ на небезопасный запрос, это неявная инструкция дляклиент (и любые промежуточные компоненты), которые ранее кэшировали представления, должны быть признаны недействительными.

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

Так, если я хочу получить отчет вместе с его метаданными?

GET /A3E7205B-6DC6-4685-9133-2759F739BC22

Если я хочу получить метаданные без самого отчета?

HEAD /A3E7205B-6DC6-4685-9133-2759F739BC22

Если я хочу изменить отчет

POST /A3E7205B-6DC6-4685-9133-2759F739BC22

PUT и PATCH являются допустимыми альтернативами POST с более конкретной семантикой, поэтому их можно использовать там.

С точки зрения REST, create - это просто еще один вид edit :

Ресурс может отображаться на пустой набор, которыйпозволяет ссылки на бЭто делается до того, как какая-либо реализация этой концепции существует - Fielding

Но часть общей гибкости POST заключается в том, что он поддерживает создание ресурса с другим идентификатором.Так что вы можете сделать это, если хотите,

, если отчет не существует;отчет об инициализации и возврате

Семантика GET должна быть безопасной - кэшам разрешено улучшать работу с помощью предварительной загрузки ресурсов, паукам разрешено их сканировать и так далее.Это не значит, что вы не можете создать что-то - HTTP ограничивает вашу семантику, а не вашу реализацию - только то, что вам нужно знать о последствиях.

HTTP не пытается требовать, чтобы результаты GET были безопасными.Для этого требуется, чтобы семантика операции была безопасной, и, следовательно, это ошибка реализации, а не интерфейса или пользователя этого интерфейса, если в результате произойдет что-либо, что приведет к потере свойства - Филдинг 2002

Вы заметили:

POSTING ... пустое тело в конечную точку кажется неправильным

Нет, этохорошо, правда.Вам нужно будет продумать некоторые другие варианты использования (что означает POST пустое тело для отчета, который существует?)

Но в случае, когда создание нового отчета эффективно бесплатно,а клиенту не нужно знать о деталях?Затем просто скажите клиенту GET представление и создайте то, что вам нужно по запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...