私のチームは、物理的な資産の追跡を処理する既存のエンタープライズ アプリケーション用の REST API を設計中です。
私たちのドメイン モデルは非常に複雑で、ルートの設計中にブロックの問題が発生しています。
理想的には、各リソースが複数のビジネス プロセスをサポートするようにしたいと考えています。しかし、リソースの URL を拡張して ServiceStack のルーティング エンジンがどの DTO を使用するかを判断できるようにしない限り、これを行う方法を見つけることはできません。
これが例です。ウィジェットに関連するトランザクションの詳細な履歴を保持し、ユーザーは、さまざまなタイプのトランザクションで表されるウィジェットで複数のタイプのアクションを実行できます。たとえば、widget
検査したり、クリーニングしたりできます。どちらも に対する操作/api/widget/{id}
ですが、最初の結果は検査トランザクションになり、2 番目の結果はメンテナンス トランザクションになります。同じルートを使用するさまざま/api/widget/{id}
な DTO を作成し、要求本文に基づいて正しい DTO を選択したいと考えています。
これは不可能のようです。代わりに、2 つのエンドポイントを作成する必要があるように見えます:/api/widgets/{id}/inspect
と/api/widgets/{id}/clean
、または同様のものです。
からそう遠くないので、RESTful とはあまり感じられません/api/cleanWidget
。リソースの更新というよりは、メソッド呼び出しに近いものです。
これまで説明してきたもう 1 つのオプションは、単一の/api/transactions
エンドポイントを作成することです。これは、API へのほとんどのリクエストでトランザクションが作成されるためです。ただし、これは 1 つのモノリシックなエンドポイントになり、ユーザーは、特定のタイプの要求に対して入力する必要がある数十の可能なデータ属性のどれを把握する必要があります。また、ユーザーがプログラミングするユースケースからはかなりかけ離れています。彼らは、私たちの舞台裏の実装ではなく、やり取りしている物理的なエンティティにもっと関心があります.
2 つの質問:
- これについて私たちは間違って考えていますか?これを RESTful な方法でモデル化するより良い方法はありますか?
- 私たちの考えが正しければ、リクエストを満たすときにどの DTO とサービス メソッドを使用するかを決定する際に、ServiceStack を使用してリクエスト ボディを考慮する良い方法はありますか?