ここには良い答えがいくつかありますが、彼らがあなたの同僚を説得するのに役立つかどうかはわかりません。多くの人が指摘しているように、あなたが提案しているのはRESTfulなデザインからの移行ではありません。それがあなたの提案でそれらを採用するための鍵だと思います。
RESTは、APIがデータの保存と取得のみを許可するようにすることではありません。むしろ、アクションをリソースとしてモデル化することに関係しています。API は、実行されるアクションを有効にする必要があります(結局、これはアプリケーションプログラミングインターフェイスです)。問題は、これらのアクションをモデル化する方法です。
用語を考え出すよりも、例がおそらく同僚にこれを説明するための最良の方法です。このようにして、彼らが今どのようにそれを行っているのか、これがどのような問題を引き起こすのか、問題を解決するソリューション、そしてそれがどのようにRESTfulのままであるかを示すことができます。
Customerオブジェクトを見てみましょう。
問題:
UIは顧客をPOSTしますが、後続のテーブルはまだ更新されていません。UIコードのエラー(またはブラウザープラグインの誤動作など)のため、後続の呼び出しの1つが失敗した場合はどうなりますか?これで、データは一貫性のない状態になりました。単に無効であることは言うまでもなく、APIまたはUIの他の部分を壊す状態になることさえあります。どのように回復しますか?これが何かを壊さないことを確認するために、可能性のあるすべての状態をテストする必要がありますが、何が可能かを知るのは難しいでしょう。
溶液:
APIエンドポイントを作成して顧客を作成します。createは動詞であり、RESTに違反するため、「/ customer / create」または「/ create-customer」エンドポイントを持ちたくないことを知っています。だからそれを名詞化します。「/ customer-creation」は機能します。これで、CustomerCreationオブジェクトをPOSTすると、顧客が完全に作成されるために必要なすべてのフィールドが送信されます。エンドポイントは、データが完全で有効であることを確認し(検証に失敗した場合は400または何かを返します)、たとえば、すべてが単一のdbトランザクション内に保持される場合があります。
/ customerオブジェクトを取得するエンドポイントも必要な場合は、それで問題ありません。両方持つことができます。秘trickは、消費者のニーズを満たすエンドポイントを作成することです。
利点:
- 悪い状態に陥らないことを保証します
- UIの開発者は、リクエストの順序、検証の問題などを「知る」必要がない場合、実際には簡単です。
- APIほどおしゃべりではないので、ネットワークリクエストの待ち時間が短縮されます。
- シナリオをテストおよび概念化するのが簡単です(UIからのデータの欠落/不正な部分はリクエスト全体に分散されず、一部は失敗する可能性があります)
- ビジネスロジックのカプセル化を改善します。
- 一般に、セキュリティが簡単になります(UIのビジネスおよびオーケストレーションロジックはユーザーが変更できるため)
- ロジックの重複を減らす可能性があります(同じデータへのアクセスを提供する2+ APIよりも、APIの消費者が2+多い可能性が高くなります)
- まだ100%RESTful
短所:
- バックエンド開発者にとっては潜在的にはより多くの作業です(ただし、長期的にはそうではないかもしれません)
人々がこのパラダイムを理解するのは難しいかもしれませんし、彼らがそれを試していないなら、それについて何が良いのかもしれません。あなた自身のコードの例を使用することで、彼らが見やすくなることを願っています。
私自身の経験では、私のチームの開発者がこの戦略の実装を開始すると、ほとんどすぐに利点を目にしました。
さらなる研究:
thoughtworksのこの記事は、実際の例を使用してオブジェクトとしてアクションをモデル化するアイデアを得るのに非常に役立ちました:https ://www.thoughtworks.com/insights/blog/rest-api-design-resource-modeling
また、CQRSとイベントソーシングを参照することもお勧めします。これらは、この種の問題に正確に関係しているためです(つまり、実際の永続ロジックからAPI を切り離す)。同僚がこの種のことをどのように読んでくれるのかわからないが、それはあなたにもっと明快さを与え、あなたにそれを説明するのを助けるかもしれない。