たとえば、アプリケーション用の HTTP API があり、それらのアプリケーションにはユーザーがいます。関係アプリケーション - ユーザーは 1:m です。モデルはアプリケーションで完全に分割されます。つまり、アプリケーションは自己完結型であり、ユーザー用のグローバル プールはありません。したがって、ユーザーを見つけるには、事前にアプリケーションを知る必要があります。
この場合に適切な REST API を設計するのは簡単ではありません。通常、URI はモデルの実装方法に依存すべきではありません。リソースに対処するだけです。また、URI もできるだけ短くする必要があります。
現在、ユーザーの URI がどのように見えるべきかについて考えています。基本的にはそのままでいいと思います
/user/{id}
外部から見れば、これは良いことです。しかし、データのパーティショニングを維持したいので、グローバル プールですべてのアプリケーション ユーザーを参照したり、利用可能なすべてのアプリケーションでユーザーを検索したりしたくありません。つまり、アプリケーションに関するコンテキストを追加する必要があります。URI を次のようにする
/application/{id}/user/{id}
問題を解決します。私のモデルを念頭に置いている間、それは理にかなっています。アプリケーションとユーザーは複合的なものです。つまり、ユーザーはアプリケーションの外では意味を持ちません。一方、ユーザーはスタンドアロンのリソースになる可能性があると考えています。そして、私のIDはUUIDであるため、URLは非常に長くなり、見栄えがよくありません(これが引数としてカウントされる場合:))
3 番目のオプションは、HTTP 要求に追加のヘッダーを配置することです。それは次のようになります
X-Foo-Application: {id}
GET /user/{id}
これが私が現時点で行っている方法です。ID が UUID であるため、(UUID の設計により) URI が異なるリソースに対して 2 回存在する可能性はありません。しかし、それがスタンドアロンのリソースとパーティション化されたデータの間で妥協する適切な方法であるかどうかはまだわかりません。
あるいは、明らかな問題解決アプローチ #4 を見逃しているだけかもしれません。どんなヒントでも大歓迎です