PHP で構築された RESTful API を使用してモデル化できるリソースの一般的な例を見てみましょう。
- ガレージには複数の車と複数の整備士がいます。
- 車にはガレージが 1 つしかありません。
- 整備士は複数の車と複数のガレージを持っています (彼は仕事中毒です!)。
したがって、ロジックは、エンドポイントが
/v1/garages
/v1/garages/1234
/v1/mechanics
/v1/mechanics/1234
/v1/cars
/v1/cars/1234
ガレージ 1234 のすべての車を取得したい場合は、
GET /v1/garages/1234/cars
ガレージ 34 にあるメカニック 12 のすべての車が必要な場合は、
GET /v1/mechanics/12/garage/34/cars
しかし、ガレージ 56 と 78 のすべての車が必要な場合はどうでしょうか。
いくつかのアイデアを念頭に置いていますが、私が考えることができる最高のものは
GET /v1/cars?garage=[id=[56,78]]
これにより、黄色のペンキとカーボンボンネットを備えたガレージから、2つまたは4つのドアを備えたすべてのグリーン車を取得できます。
GET /v1/cars?garage=[paint=yellow,bonnet=[material=carbon]]&color=green&doors=[2,4]
これは合理的な考えのように思えますか、それともこれがネスティングで複雑になるという問題に遭遇するのでしょうか?これは PHP で簡単に解析できますか?
私が持っていた別のアイデアは、すべてのjsonがURLで有効であることを知っている限り、Jsonでした。
GET /v1/cars?{"color":"green","doors":[2,4],"garage":{"paint":"yellow","bonnet":{"material":"carbon"}}}
ほとんどすべてのプログラミング言語が json をサポートするようになり、API 側で使用できるようになったため、開発者にとって非常に使いやすくなりましたjson_decode($_SERVER[''QUERY_STRING])
。Json の使用に問題はありますか?
第三のアイデア「検索を作成する」
これにより、私たちは使用することを意味します
POST /cars/search
上記のJsonを投稿データとして使用すると、リクエストは検索のIDを返すだけで、これを介して結果を取得でき、GET /cars/search/{id}
私の側の複雑さが軽減され、リクエストの8kb制限が回避されます(これはAPIであり、ブラウザーのアドレス バーで使用されます)。GET /v1/cars
しかし、これを行うと、トップレベルのエンドポイントの目的が無効になるのではないかと心配していますか?