私はREST Webサービスがあり、CompanyとUserのようないくつかのリソースがあります。しかし、会社、ユーザー、そしておそらく他のタイプを組み合わせた特別なリストを返すようにAPIを変更する必要がありますさまざまなタイプのリソースを含む推奨事項のリストのように。
これを解決するための最良のアプローチはどれですか?
次のような新しいエンドポイント(リソース)を作成する必要があります:/recommendations
?私はすでに/company
エンドポイント、および/user
エンドポイントは対応するオブジェクトを返します。これで結構です。しかし今、私はユーザーと会社の組み合わせで配列を返す方法が必要です。
また、jsonはオブジェクトの配列のように見えると思いますが、配列内のすべてのオブジェクトが異なるリソースである場合、クライアントはどのタイプのオブジェクトを解析しているのかをどのように知ることができますか?
[〜#〜]編集[〜#〜]
クライアントにアプリのおすすめ画面を表示してほしい。問題は、このリストが複数のタイプのデータ(ユーザー、会社)を組み合わせることができることです。このリソースに関係があるかどうかは関係ありません。クライアントはそのようなjsonを受け取ります。
"recomendations": [
{
"id_user": 1
"name": "Jean"
...
},
{
"id_company": 2
"name": "Starbucks"
...
},
...
]
おすすめのリソースを/recommendations
にマッピングし、次の構造を使用します。
{
"users" : [
{ .. },
{ .. }, ..
],
"companies" : [
{ .. },
{ .. }, ..
]
}
これにより、コンシューマは名前(たとえば、users
またはcompanies
)に基づいて適切に解析できます。
私は、推奨事項のすべての関連情報を含む個別の推奨事項タイプを定義します。モデルでは、このタイプはnotをデータベーステーブルに直接マップしますが、その内容を(おそらくSQL UNIONを使用して)UserテーブルとCompanyテーブルの両方から取得します。
CompanyとUserの間の関係について想定せずに、さまざまなタイプのオブジェクトの構成を返す素敵な方法が必要だと思います。これを行う方法を明確に定義する標準提案、ハイパーテキストアプリケーション言語があります。次に例を示します。
GET /recommendations HTTP/1.1
Host: example.org
Accept: application/hal+json
HTTP/1.1 200 OK
Content-Type: application/hal+json
{
"_links": {
"self": { "href": "/recommendations" },
"next": { "href": "/recommendations?page=2" },
"find": { "href": "/recommendations{?id}", "templated": true }
},
"_embedded": {
"recommendations": [{
"_links": {
"self": { "href": "/recommendations/123" },
"users": { "href": "/users/98712" },
"companies": { "href": "/companies/7809" }
},
},{
"_links": {
"self": { "href": "/recommendations/124" },
"users": { "href": "/users/97213" },
"companies": { "href": "/companies/12369" }
},
}]
},
}
ExampleDocument からコピー