Путаница между существительным и глаголом в URL-адресах останова

Я изучил через Интернет о restful APIs, что он сосредоточен на существительных, а не глаголах в шаблоне url, но теперь я вижу несколько ссылок, которые используют глаголы в URL.

Вот пример.

  • POST/v1/payments/authorization/< Authorization-Id > /capture
  • POST/v1/payments/authorization/< Authorization-Id > /void
  • POST/v1/payments/authorization/< авторизация-Id & reauthorize

это Paypal apis. API PayPal

также на wikipedia на странице HTATEOAS они привезли пример;

<?xml version="1.0"?>
<account>
   <account_number>12345</account_number>
   <balance currency="usd">100.00</balance>
   <link rel="deposit" href="/account/12345/deposit" />
   <link rel="withdraw" href="/account/12345/withdraw" /> 
   <link rel="transfer" href="/account/12345/transfer" />
   <link rel="close" href="/account/12345/close" />
 </account>

ссылка: Wiki HATEOAS

Может ли кто-нибудь помочь мне получить некоторую ясность по этому поводу? почему "захват", "пустота", "депозит", "вывод", "закрытие" находятся в URI, потому что все глаголы не являются существительными?

или это нормально использовать эти слова в полном порядке apis url?

Ответы

Ответ 1

Некоторые фрагменты из Rule API Rulebook о разных типах ресурсов:

Документ

Ресурс документа - это уникальная концепция, которая сродни экземпляру объекта или базе данных запись.

Пример:     http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet

Collection

Ресурс коллекции - это управляемый сервером каталог ресурсов. Клиенты могут предлагать новые ресурсы, которые будут добавлены в коллекцию. Однако выбор зависит от выбора для создания нового ресурса или нет.

Пример: http://api.soccer.restapi.org/leagues/seattle/teams

Магазин

Магазин - это репозиторий ресурсов, управляемый клиентом. Ресурс магазина позволяет клиенту API ресурсы, вернуть их и решить, когда их удалять. Собственные магазины не создавать новые ресурсы; поэтому магазин никогда не генерирует новые URI. Вместо этого каждый хранимый ресурс имеет URI, который был выбран клиентом, когда он был первоначально помещен в магазин.

Пример: PUT /users/1234/favorites/alonso

контроллер

Ресурс контроллера моделирует процедурную концепцию. Ресурсы контроллера похожи на исполняемые функции с параметрами и возвращаемыми значениями; входы и выходы.

Как и традиционные веб-приложения, использующие HTML-формы, REST API полагается на контроллер ресурсов для выполнения действий, специфичных для приложения, которые невозможно логически сопоставить с один из стандартных методов (создание, извлечение, обновление и удаление, также известный как CRUD).

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

Пример: POST /alerts/245743/resend

Основываясь на определениях в книге, URI, которые вы опубликовали, вероятно, относятся к типу ресурса Контроллер, о котором позже говорится в книге:

Правило: для имен контроллеров следует использовать глагольную или глагольную фразу

Примеры:

  • http://api.college.restapi.org/students/morgan/register
  • http://api.example.restapi.org/lists/4324/dedupe
  • http://api.ognom.restapi.org/dbs/reindex
  • http://api.build.restapi.org/qa/nightly/runTestSuite

Другие правила именования, только для полноты

  • Правило: для имен документов следует использовать уникальное существительное
  • Правило: множественное число существительное должно использоваться для имен коллекции
  • Правило: множественное число существительное должно использоваться для имен магазинов

Ответ 2

В REST глагол используется метод HTTP. В вашем примере это POST, но также может быть GET, PUT или DELETE.

существительное - это ресурс, идентифицированный URL-адресом. В вашем примере "существительные" /v1/payments/authorization/<Authorization-Id>/capture и т.д.

Как вы можете видеть, это не действительно существительное, так как capture - это глагол: захват авторизации платежа. Это не RESTful, поскольку это команда, глагол, а не вещь, существительное.

Лучше всего было бы моделировать эти команды как вещи, такие как /v1/payments/authorization/<Authorization-Id>/capturecommand. Эта команда будет вещью, существительным. Он может иметь состояние, например, если оно было успешным, каков был результат и т.д.

Существует много кода, который утверждает, что он RESTful и не работает.

Ответ 3

Трюк состоит в том, чтобы сделать все существительные (или сущности), которые работают с глаголами CRUD.

Итак, вместо <

POST /v1/payments/authorization/<Authorization-Id>/capture
POST /v1/payments/authorization/<Authorization-Id>/void
POST /v1/payments/authorization/<Authorization-Id>/reauthorize

Сделайте это;

capture -> POST /v1/payments/authorization/<Authorization-Id>
void    -> DELETE /v1/payments/authorization/<Authorization-Id>
reauthorize -> delete first then create again.