1

顧客がプログラムでサービスを呼び出すためのWebサービスを実装する方法を検討する際に、Microsoft Web APIフレームワークを確認しましたが、見た目は素晴らしいですが、これは使用するのに最適で最も柔軟なフレームワークですか?

たとえば、顧客が次のようなRESTfulメソッドを呼び出せるようにします。

/ api / products / create

可能な限り柔軟に対応し、お客様がいくつかの異なる方法で電話をかけられるようにします

HTTP GET:
/api/products/create?name=widget&price=1.99

HTTP POST:
/api/products/create
name=widget&price=1.99


JSON via POST:
/api/products/create
{ "name": "widget", "price": 1.99 }

XML via POST:
/api/products/create
<product><name>widget</name><price>1.99</price></product>

そして他に意味のあることは何でも。結局のところ、アクションを実行するための入力が必要なだけで、クライアントが好みの方法で最も簡単に呼び出すことができるようにしたいので、どのように呼び出すかは気にしません。そうすれば、応答できます。同じ形式で、またはたとえばAcceptリクエストヘッダーを介して指定する場合は特定の形式で。

Web APIフレームワークはこれを処理できますか、それともこのように機能する他のルーティングフレームワークがあり、ProductsRepositoryに送信できるProductモデルでコントローラーが呼び出されますか?

4

1 に答える 1

3

WebAPIは間違いなくそれを処理できます:)

これがあなたのやり方です。このルートを設定します。

config.Routes.MapHttpRoute("WebAPI", "api/{controller}/{action}");

次のようにモデルとコントローラーを作成します。

public class ProductsController : ApiController
{
    [HttpGet]
    public void Create(string name, decimal price)
    {
        Create(new Product() { Name = name, Price = price });
    }

    [HttpPost]
    public void Create(Product product)
    {
        // Create product
    }
}


[DataContract(Name = "product", Namespace = "")]
public class Product
{
    [DataMember(Name="name")]
    public string Name { get; set; }
    [DataMember(Name="price")]
    public decimal Price { get; set; }
}

上にリストしたものはすべてこれで動作するはずです。最初のアクションはGETを処理し、リクエストに適切なContent-Typeヘッダーがある限り、表示した3つの異なるPOST形式はすべて2番目のアクションで正しく機能するはずです。

Web APIには、デフォルトでXML、JSON、およびフォームURLエンコードされたデータを逆シリアル化するフォーマッターが付属していますが、独自のカスタムフォーマッターを登録してさらに多くのフォーマットをサポートすることもできます。それについての詳細が必要な場合は、ここで見つけることができます:

http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters

WebAPIを使用する主な利点の1つに到達しました。これにより、ビジネスロジックを書き直すことなく、さまざまな形式のデータを非常に簡単に読み取って公開できます。

于 2013-02-02T22:00:21.187 に答える