ServiceStackを使用して、OData と同様の方法で URL を構成することにより、関連するサービスにアクセスする方法を探しています。
ODataの例は、次のような URL になります。
http://localhost:8080/owind.svc/Categories(2)/Products
これにより、カテゴリ 2 に関連するすべての製品が検索されます。
ServiceStack での同等の例は、ProductService の Request DTO を作成し、Routes を次のように設定することです。
[Route("/Products")]
[Route("/Products/{Id}")]
[Route("/Categories/{Category}/Products")]
public class Products
{
public string Id { get; set; }
public string Category { get; set; }
}
(ここで言及されている懸念事項の分離は無視してください。上記の属性は、少なくとも私が求めていることを明確に示しています。)
そして、ProductService では、主キーまたは外部キーを介して Products を検索できます。ServiceStack.Northwind.ServiceModel サンプル プロジェクトの Northwind.ServiceModel.Operations.Orders クラスで使用されているこれらの線に沿ったものを見つけました。
だから私は疑問に思っています.これは、ServiceStackでこの種のことを行うために存在する最良かつ最もスケーラブルな方法ですか、それとも私が見逃しているショートカットがありますか? 数百のテーブルをサポートするサービスを作成する規模で考えて、何らかのショートカットが存在し、文字列が添付されていない場合は、役立つ可能性があります。
DTO プロパティ名 (通常は単数形) からルート (多くの場合複数形) へのマッピングを行う必要がありますが、DTO の任意のものに基づいてルートを自動的に生成できるシステムを想像できます。
これを1つのレベルを超えて実行することが考えられるかどうかはわかりません...たとえば
.../Employee/1/Orders/Customers
これにより、従業員 #1 に注文したすべての顧客が取得されます。これを手動で大規模に実装するという考えは、法外に思えます。SOA に関する議論が賛成か反対かは定かではありませんが、それも知っておくとよいでしょう。
明確にするために、基礎となるデータ ストアやアクセス ライブラリを想定する必要はありません。