このようなリソースがあるとしましょう。
book:
type: object
properties:
author: {type: string}
isbn: {type: string}
title: {type: string}
books:
type: array
items: book
したがって、誰かがBooksリソースでGET
を作成すると、次のようになります
[{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"},
{"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}]
職場の誰かから、推奨されるRESTプラクティスは常にJSONオブジェクトとして応答を返すことです。つまり、books
のスキーマは次のようになります。
books:
type: object
properties:
list:
type: array
items: book
したがって、今、応答は次のようになります、
{
"list": [{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"},
{"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}]
}
どれがベストRESTプラクティスですか?
実際には、2番目のオプションがベストプラクティスです。これは、配列を返すだけではリソースを拡張できないためです。
例:すべてのレコードの数を追加する必要がある場合は、配列のみのアプローチですでに完了しています。
それが1つのリストAPIで発生する場合は、一貫性を保つためにすべてのオブジェクトを作成する必要があります。そうすると、APIの一貫性が高まり、開発者にとって使いやすくなります。
例:開発者がAPIを使用してリストと詳細ページを表示する一般的なコードを書いたとしましょう。場合によっては配列であったり、場合によってはリストプロパティを持つオブジェクトであったりするため、例外を構築したくありません。
この回答は全体として、休息、ハテオア、その他のプロトコルに関する原則とは関係ありませんが、クライアントに送信する必要のあるデータについて本物であるだけです。たとえばハテオをフォローすることにした場合は、コースの基準(オブジェクトでもある)を使用します。
どちらも
[{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"},{"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}]
そして
{
"list": [{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"},
{"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}]
}
有効なJsonです。 「リスト」が不要な場合は追加しないでください。その後に続くものがリストではなく配列であるため、混乱を招く可能性さえあります。
ベストREST実践?APIはAcceptヘッダーで設定されたものすべてに適切な応答を提供し、優れたドキュメントも提供する必要があります。
応答をJSON準拠にする理由は次のとおりですJSONは事実上の標準です; JSONパーサーを備えた任意の言語で簡単に構文解析でき、JavaScriptを使用している場合はパーサーも必要ありませんJavaScriptはそれをネイティブに理解するからです。
つまり、JSONに準拠させれば、独自のパーサーを作成する必要がなくなります。さらに、次の開発者がサービスを利用するソフトウェアを作成しても、驚くことはありません。
RESTはJSONスキーマとは何の関係もありません。 RESTの観点から、どちらのスキーマも許容されます。
2番目のオプションも、セキュリティ上の理由から推奨される方法です。古いブラウザにはセキュリティの脆弱性があり、JSON配列として返された場合、Webページ上の他のJavaScriptコードがデータを盗む可能性があります。したがって、これまでのベストプラクティスはJSON配列を返さないことでした。実際、配列を渡すときに「json-ify」機能がデフォルトでオプション2を選択するフレームワークがいくつかありました。
単一の無意味なキー「リスト」と配列値を持つ辞書は無意味です-代わりに配列を返します。
同じサービスが本、CD、またはDVDを返すことができる場合は、キー「books」と配列値を持つディクショナリを返すことができます。一連のDVDを持つ別の重要な「DVD」が存在する可能性があります。たとえば、顧客がすべての購入のリストを照会できる場合です。
応答が書籍のリストとしてのみ解釈されることが確実である場合(リクエストが「書籍のリストを提供してください」と言った場合)、配列のみで問題ありません。
どちらもjsonであり、RESTに準拠しています。私はあなたの場合リストを本に変えて、応答をより説明的にします。またはこのようなもの:
{ "responceObject" : {
results : 2,
"Books": [
{"author": "Dan Brown", "isbn": "123456", "title": "Digital Fortress"},
{"author": "JK Rowling", "isbn": "234567", "title": "Harry Potter and the Chamber of Secrets"}
]
}}