質問: json apiまたはプレーンjson json api仕様 を使用するか、またはiosやandroidを中心とするモバイルアプリで使用されるapiを開発するためにプレーンjsonを使用するかについては、社内で議論があります。json apiの引数の1つは、すべてが事前に定義されているため、新しい開発者がapiの作業を開始した場合、必要なものをすばやく見つけることができるということです。もう1つは、ほとんどの関係を応答にバンドルできるため、サーバーの負荷を軽減できることです。json apiに対する反対意見の1つは、これまで存在しなかった問題を引き起こすことです。プレーンjsonを使用する場合、同じタイプのリレーションシップまたはオブジェクトを保持する属性があります。たとえば、著者と発行者に関する情報を保持する小説をどこに置くかは、プレーンjsonは次のようになります。{ author: { name: "john", lastname: "appleseed", id: 1 }, title: "some great novel", publisher: { name: "something" } } そしてandroid私はjsonをシリアル化するクラスを作成することができます。クラスはそのようなものでしょうclass novel { string title; author author; publisher publisher; } class author { string name; string lastname; int id; } class publisher { string name; } その後、retrofitは応答を解析し、novel pojoを返します。swiftでは、swiftyjsonを使用して同様の構造体またはクラスを作成できますが、唯一の違いは、クラスの値を設定するために追加のボイラープレートコードを記述する必要があることです。これは簡単なアプローチのようです。ただし、json api実装を使用すると、はるかに複雑になり、読みにくくなります。ほとんどの関係をバンドルして応答で返すことができるため、サーバーの負荷を軽減するという引数については、上記の例のようにプレーンなjsonで実現できます。javaまたはswiftなどの静的に型付けされた言語でjson apiを使用するのが良い選択であるかどうかについて、いくつかの洞察を使用できます
回答: 新しいコンテンツと機能をクライアントに変更せずに動的に追加できるようにしますか?json apiを使用する場合(そして実際にそれを活用する場合)、まさにそれを達成できます。bookリソースのv1が次のようになっているとしましょうlinks: { self: "/books/1" next: "/books/2" } author: { links: { self: "/authors/1" } name: "john", lastname: "appleseed", id: 1 }, title: "some great novel", publisher: { name: "something" } 次に、購入する機能を追加することにします。links: { self: "/books/1" next: "/books/2" purchase: "/books/1/purchase" } すべての可能なアクション(links)のみを表示するようにクライアントを構築している場合は、購入機能を追加しただけです。すべてのクライアント。サーバーから返されるものを更新するだけです。ステフェン・ティルコフの講演を観ることを強くお勧めします: rest:それがあなたの考えていることを意味しているとは思わない 。