3

これは、WebAPIの設計に関する質問です。人口、FIPSコード、地域などの都市と都市のプロパティを返すメソッドがあるとします。より多くのプロパティがあり、多くの場合20以上です。

場合によっては、FIPSコードを送信して、都市名が返されることを期待します。また、FIPSコードを送信して、他のいくつかのプロパティ(おそらく地域と人口)が返されることを期待します。

私の質問は、これらのシナリオのコントローラーとアクションをどのように構築する必要があるかということです。Cityという名前の1つのコントローラーと、必要なものを正確に返すための一連のメソッドが必要ですか、それとも複数のコントローラーを使用する必要がありますか?

私はWebAPIの設計にかなり慣れていませんが、単一のコントローラーを使用する方がクリーンだと感じています。私の考えは、GetNameAndPopulationFromFipsCode()などの適切な名前のアクションを持つCityという名前のコントローラーです。

4

1 に答える 1

0

リソースは同じなので、通常は同じコントローラーになります。

これを実装する自然な方法が 2 つあります。

  1. コンテントネゴシエーション
  2. 完全なビューモデルを取得するためにオプションのパラメーターを渡すクライアント

1 つ目はより RESTful ですが、Web API の現在のキーベースの conneg を考慮すると、少し面倒な場合があります。

2 つ目は実装が簡単です。

// almost pseudocode !!
// called by /api/City/123?extended=true
public City Get(int id, bool? extended)
{
   ExtendedCity city = GetCity(id);
   return extended.HasValue && extended.Value ? MapTo(city) : city;
}

// ----

public class City
{
   ...
}

public class ExtendedCity : City
{
   ...
}

アップデート

@Darrel が指摘したように、クエリ文字列パラメーターはリソースを変更します。ただし、リソース編成に関しては、階層を維持するため、推奨されるアプローチです。

于 2013-02-04T11:03:23.620 に答える