web-dev-qa-db-ja.com

残りのURLにおける名詞と動詞の混乱

私はURLパターンの動詞ではなく名詞に焦点を当てた安らかなAPIについてインターネット上で勉強しましたが、今ではURLに動詞を使用する複数のリンクを見ています。

以下に例を示します。

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

これはPaypal apiです。 Paypal API

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 [〜#〜]

誰も私がこれについていくらか明確にするのを手伝うことができますか?なぜ 'capture'、 'void'、 'deposit'、 'withdraw'、 'close'がURIにあるのは、それらがすべて名詞ではなく動詞だからです。

または、rest-full apis urlでこれらの種類の単語を使用しても大丈夫ですか?

31
Uzair Xlade

REST API Design Rulebook のさまざまなリソースタイプに関するスニペット:

ドキュメント

ドキュメントリソースは、オブジェクトインスタンスまたはデータベースレコードに類似した特異な概念です。

例:http://api.soccer.restapi.org/leagues/seattle/teams/trebuchet

コレクション

コレクションリソースは、サーバーが管理するリソースのディレクトリです。クライアントは、コレクションに追加する新しいリソースを提案できます。ただし、新しいリソースを作成するかどうかは、コレクション次第です。

例: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はおそらくControllerリソースタイプに該当します。

ルール:動詞または動詞句をコントローラー名に使用する必要があります

例:

  • 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

完全を期すための他の命名規則

  • ルール:ドキュメント名には単数形の名詞を使用する必要があります
  • ルール:コレクション名には複数名詞を使用する必要があります
  • ルール:店名には複数名詞を使用する必要があります
21
Paul Samsotha

RESTでは、動詞はHTTPメソッドです。あなたの例ではPOSTですが、GETPUT、またはDELETEの場合もあります。

名詞は、URLで識別されるリソースです。あなたの例では、「名詞」は/v1/payments/authorization/<Authorization-Id>/captureなどです。

ご覧のとおり、captureは動詞であるため、これは実際には名詞ではありません。支払い承認を取得します。これは、コマンドではなく動詞であり、物ではなく名詞なので、RESTfulではありません。

より良い方法は、これらのコマンドを/v1/payments/authorization/<Authorization-Id>/capturecommandのようなものとしてモデル化することです。このコマンドは、名詞です。たとえば、成功したかどうか、結果は何であるかなどの状態を持つことができます。

RESTfulであると主張するコードとそうでないコードがたくさんあります。

7
user1907906

トリックは、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.
6
nesty