3

リソースの「サブ プロパティ」を返す必要がある asp.net webapi 規則ベースのレスト サービスの「ベスト プラクティス」の方法がわかりません。

例えば:

UsersController

public User Get(int id) { ... } //returns named user via /api/v1/Users/23

しかし、特定のユーザーロールコレクションを返したい場合は、次の URL が必要だと思います/api/v1/Users/23/Roles

私のAPIを使用していた場合、これは受け入れられると思いますか?

許容できる場合、私の routeTemplate とメソッドの署名はどのようになりますか (これが明らかである場合は申し訳ありません - 今日は本当に混乱しました)

私が見つけることができるすべての Web API の例は単純すぎて、DELETE、PUT、POST と 2 つの GET を使用するだけです - サブ プロパティ (上記のように) や部分応答のようなものをカバーしているようには見えません /api/v1/Users/23?fields=id,name- 誰かが良い例を知っているなら素晴らしい。

どうもありがとう

4

1 に答える 1

2

役割

Roles は非常に賢明なサブ リソースのように見えます。

http 動詞を使用してユーザーのロールを一覧表示および削除すると仮定すると、2 つのコントローラーを使用できます。1 つはユーザー用、もう 1 つはロール用です。ルートは次のようになります。

config.Routes.MapHttpRoute(
            name: "UserApi",
            routeTemplate: "api/v1/Users/{userId}/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/v1/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

ロール コントローラーには、次のようなメソッドがあります。

public class RolesController : ApiController
{
    // GET api/v1/users/1/roles
    public IEnumerable<Role> Get(int userId)
    {
        //
    }

    // GET api/v1/users/1/roles/1
    public IEnumerable<Role> Get(int userId, int id)
    {
        //
    }

}

ユーザーの部分的な応答としての役割

リクエストに使用する形式と標準については、次のとおりです。

apigee は自社のサイトで無料の eBook を作成しており、設計に関する推奨事項や既存の API に関する考察を行っています。

LinkedIn、Facebook、Google からの部分応答の例について説明します。これについては、こちらのブログの 1 つと、こちらの本で説明されています

WebApi ASP.NET の使用方法

コンテンツ タイプとして JSON を使用すると仮定すると、 ASP.NET Web API 部分応答 Json シリアライゼーションの前に同様の質問がされています。つまり、"?Fields=" などのクエリ パラメータをカスタムに渡す必要があります。ContractResolver.

于 2013-02-08T14:35:39.307 に答える