私はREST APIを構築しています。私はリンクを非常に長くしている関係があります。彼らは私には意味をなさないが、それは混乱している。私はこれを処理する最善の方法が何であるか分かりません。長い間リンクしているのは問題ですか?私はこれらの原則に違反していますか?このような関係をどのように扱うべきですか?REST APIで非常に深い関係を扱う
以下の例は少し工夫されていますが、私が何をしようとしているかを示しています。
会社は、部が多く、である。各部には、の従業員が多数あります。各従業員は、多くの場合、台のコンピュータを持つことができます。各のコンピュータは、の文書を多数持つことができます。
GET
へのパスは、特定の文書は次のようになります
/companies/:companyId/departments/:departmentId/employees/:employeeId/computers/:computerId/documents/:documentId
を各IDは、その層内でグローバルに一意である - どの2つの文書IDは、システム全体にわたって同じしないであろうが、ドキュメントIDがあってもよいです従業員IDと同じです。
これは私にとっては理にかなっています。なぜなら、各レイヤーはその上の1つのものにしか関連付けられていないからです。部門は、単一の会社、単一の部署のみの従業員、単一の従業員のみのコンピュータ、および1台のコンピュータへの文書にのみ所属します。
/computers
のような別個のエンドポイントにこれらを分割することができますが、どのようにそれらを壊すべきか分かりますか?なぜ/computers
をエンドポイントとして選択し、/employees/:employeeId/computers
を選択しないのですか?
** documentId **はグローバルに一意ですか? – JonSG
@JonSGはい、すべてのドキュメントID内で一意です。私は明確にするために質問を編集しました。 – vaindil
私の意見はこちらですが、APIの階層構造を表現する必要はありません。あなたが例示したものの、他にも多くのものがあります。私はあなたのapiを**/document/[id] **に簡略化する必要があるように感じます。同様に、employeeidがグローバルに一意の場合は、** employee/[id] **となります。 Idと知られているファイルの内容を知りたい場合、なぜ消費者に従業員や部門について知らせるのですか?一方、最初の投稿/ putは、階層が必要となる可能性があるため、別の問題です。 「完全な」動詞セットをサポートする必要がありますか、それとも十分ですか? – JonSG