私はこの方法でこの質問をします-私のREST APIを「正しい」方法で実装しないことのソフトウェアエンジニアリングの懸念は何ですか?
「正しい」方法とはどういう意味ですか?まあ、私が正しい方法についての私の認識を説明できるようにしてから、私がそれをどのように行っているかを説明します(また、JSON REST APIについて話していると仮定します)。
正しい方法
無国籍。これは私が得る部分です。クライアントは常に100%いつまでも状態を維持します。それはサーバーの仕事ではなく、クライアントの仕事です。
各動詞の予想されるアクションと応答:
- GET-完全に指定されたリソースを取得します。リクエストの承認またはクエリパラメータのいずれかによってのみ制限されます。これにより、プロセス内のリソースが変更されることはありません。
- POST-リソースの説明全体(JSONオブジェクトなど)を指定すると、リソースを作成し、日付やIDなどのサーバー側のプロパティも作成してそのリソースを返します。
- DELETE-指定されたリソースを削除し、応答として何らかの200 OKのみを与えます
- PUT -指定されたオブジェクト全体宣言入力として、入力で与えられたフィールドのそれぞれにリソースのすべてのフィールドを更新し、特定の場所でリソースを更新します。明確にするために、これはオブジェクト全体が入力として渡されることを期待しています。更新されたリソース全体が、すべてのフィールドとともに(許可またはその他の入力フラグに従って)返されます。
- PATCH-リソースの変更が必要なフィールドのみを指定して、入力として指定された指定されたリソースのフィールドのみを更新します。(これは私が不明瞭なところです):リソース全体が返されますか?(または、更新されたフィールドだけですか?Dunno。気にしないでください。)
- リソースパス。リソースの相互関係を考えると、リソースパスは次のいずれかになります。
- / parentresource /:id
- / parentresource /:id / childresource
- / parentresource /:id / childresource /:childId
- / parentresource /:id / childresource /:childId / subresource /:subresourceId(この例では、サブリソースは、親リソースに属する子リソースに属しています)。
やりたいこと
上記は、REST APIがどのように機能するかについての私の理解です。次に、上記のバリエーションのいくつかをリストします。
- PUT / PATCH-変更のためにリソース全体を渡すポイントは何ですか?リソースの変更にはPUTのみを使用し、更新するフィールドのみを渡します。その結果、パッチを使用する必要はありません
リソースパス-アプリケーションでGUIDを使用しています。その結果、それらは世界的にユニークになります。単独でサブリソースを一意に参照できるのに、親リソースを含む完全なリソースパスが必要なのはなぜですか?以下のような:
/サブリソース/:subresourceId
:もし私のような完全なパスが必要となるサブリソースを参照しようとし、それを「正しい」やり方をやっていた
/ parentresource /:ID / childresource /:たchildID /サブリソース/:subresourceIdを
すべてその必要?パスに、指定された:childIdが実際に所有していない:subresourceIdと、親:idが所有していない:childIdのディットが含まれている場合、追加のエラー処理が必要になるためです。私のサーバー側はリソースの許可を処理しています。フルパスではなく、リソース自体を参照することはできませんか?戻り応答。たとえば、私のデータ構造が階層ツリーであり、ツリーの深さに実質的な制限がないとします。リソースは、ツリーのさまざまなレベルに階層的に配置されています。
- GETは明白です。このツリー全体を取得した場合、リソース全体がリソース内に含まれた状態で、ツリー全体が応答として期待されます。
- 新しいリソースを作成するためにPOST、更新するためにPUT、または削除するためにDELETEを実行する場合、作成/更新/削除したリソースを表示するだけでなく、ツリー内のデルタを表示したいと思います。POST、PUT、またはDELETEを実行するたびに、親ツリーのGETを再度呼び出す必要はありません。特に、ツリーにほとんど変更がなく、デルタのみを表示したい場合に使用します。
うまくいけば、私の質問は明確です。
私が説明したようにREST実装を見たとしたら、それを見て、ソフトウェアエンジニアリングの懸念事項について教えてください。もしそうなら、彼らは何でしょうか?