私はグーグルであらゆる場所を検索してみましたが、このトピックに関する決定的な権威を見つけることができませんでした. REST の原則に忠実でありながら、次の HTTP インターフェースをどのように設計すればよいでしょうか。
順序付きリスト (取得、追加、位置への挿入、並べ替え、削除)
セット (取得、追加、削除)
ハッシュ テーブル (取得、追加、削除)
注: これらのデータ構造には、既知の ID を持つ既存のリソースへの参照が含まれます。
私はグーグルであらゆる場所を検索してみましたが、このトピックに関する決定的な権威を見つけることができませんでした. REST の原則に忠実でありながら、次の HTTP インターフェースをどのように設計すればよいでしょうか。
順序付きリスト (取得、追加、位置への挿入、並べ替え、削除)
セット (取得、追加、削除)
ハッシュ テーブル (取得、追加、削除)
注: これらのデータ構造には、既知の ID を持つ既存のリソースへの参照が含まれます。
それが、順序付きリストとハッシュ テーブルに対して行う方法です。セットとリストのメソッドは同じだと思います。
アイテム 123 を取得します。
GET /list/123
リストにアイテムを追加します。
POST /list/
新しい項目を位置 5 に挿入します。
POST /list/?position=5
アイテム 123 を位置 3 に移動します。
PUT /list/123?position=3
アイテム 123 を削除します。
DELETE /list/123
位置 3 のアイテムを削除:
DELETE /list/?position=3
もちろん、挿入と削除を行うときに、API はすべての要素のインデックスを更新する必要があります。
アイテム「somekey」を取得:
GET /hashtable/somekey
項目「somekey」を追加:
POST /hashtable/somekey
アイテム「somekey」を削除します。
DELETE /hashtable/somekey
@ダダズ
このようなインターフェイスを直接定義することはできません。
順序付きリスト (取得、追加、位置への挿入、並べ替え、削除)
「位置への挿入」と「並べ替え」を除外することで、「取得」、「追加」、「削除」を完全に実装できます。次に例を示します。
これは非常に大まかな例ですが、いくつかのアイデアの概要を示しています。「並べ替え」と「位置への挿入」を実現するには、リソース表現に含めることができる独自のアクション セマンティクスを実装し、これらの操作を実行する方法をクライアントに知らせる必要があります。参考として、この JSON PATCH 仕様の提案を見ることができます: https://www.rfc-editor.org/rfc/rfc6902は、そのような操作を説明しようとしています。
既存のメディア フォーマットを使用する必要はありません。独自の名前空間で独自のメディア フォーマットを定義できます。
基礎となるアプリケーションからトランスポート メカニズムを分離する必要があります。アプリケーションを正しく設計することを検討してから、HTTP 経由でアプリケーションにアクセスする方法を見つけます。このようにして、基盤となるアプリケーションに影響を与えることなく、トランスポート メカニズム (SOAP、SCA など) を簡単に追加または変更できます。
アプリケーションを正しく設計したら、アダプターやビジター パターンなどを介して HTTP リクエストからアクセスすることを検討してください。
これが再注文の私の考えです。
リソースのフラグメントを更新するために使用される PATCH と呼ばれる HTTP メソッドがあります。リソースに という新しいプロパティを与えてindex
から、PATCH メソッドで呼び出しを行います
PATCH /collection
[
{
"id: "original index 0"
"index": 1
}
{
"id: "original index 1"
"index": 0
}
]
次に、サーバーのバックエンドは、これをアトミックに行う方法を理解する必要があります。しかし、インターフェイスに関しては、これが RESTful に忠実であり続けるための最良の方法だと思います。
別の方法として、より良い解決策がありますが、すべてのケースに当てはまるとは限りません。順序付けは常に何らかの基準に依存するため、広告掲載順序と同じくらい単純な場合もあります。コレクションの URL がorderBy
クエリ文字列をサポートするようにし、これorderBy
によって結果の順序が決定されるようにします。次に、クライアントからの再注文呼び出し中に、注文基準に使用されるリソースのプロパティを更新するだけです。
私は主に RESTful な並べ替え方法を探して、この質問にたどり着きました。私はどの回答もあまり好きではないので、これが最も RESTful だと思うものです。
再注文の場合、注文をリソースにすることができます。
/list/order
その後、通常の操作を行うことができます (これらの例では、現在 5 つの項目があるリストを想定しています)。
"items":" [
{
"id": "A",
"name": "Monkey"
},
{
"id": "B",
"name": "Cow"
},
{
"id": "C",
"name": "Horse"
},
{
"id": "D",
"name": "Turkey"
},
{
"id": "E",
"name": "Tasmanian Devil"
},
]
「注文」はリソース応答に含まれないことに注意してください。必要ありません。順序は、アイテムの応答順序によって暗黙的に指定されます。
GET /list/order
アイテム ID のリストを正しい順序で返します
['A','B','C','D','E']
POST /list/order
ペイロード付き['D','B','C','A','E']
GET /list/order
アイテム ID のリストを正しい順序で返します
['D','B','C','A','E']
GET
また、 onを実行すると、リスト内のアイテムが正しい順序で返されることは明らかです/list
。
GET /list
アイテムのリストを正しい順序で返します
"items":" [
{
"id": "D",
"name": "Turkey"
},
{
"id": "B",
"name": "Cow"
},
{
"id": "C",
"name": "Horse"
},
{
"id": "A",
"name": "Monkey"
},
{
"id": "E",
"name": "Tasmanian Devil"
},
]