ASP.
HTTPの仕様に準じたフレームワーク
ASP.
実装の中心:エンドポイントの定義
まずは,
ASP.
リスト1 顧客APIのエンドポイント
public class CustomerController : ApiController
{
// GET api/customer
public IEnumerable GetAll()
{
// すべてのCustomerを返す処理
throw new NotImplementedException();
}
// GET api/customer/5
public Customer GetCustomerById(int id)
{
// Idと一致するCustomerを返す処理
throw new NotImplementedException();
}
// POST api/customer
public void PostCustomer(Customer newCustomer)
{
// 新しくCustomerを作成する処理
throw new NotImplementedException();
}
}
このコードは,
「HTTPメソッド:GET,
このように,
ここでは,
メソッド名
1つは,
もちろん,
リスト2 Httpメソッド属性の付与
// POST api/customer
[HttpPost]
public void Create(Customer newCustomer)
リクエストとレスポンス
2つ目の特徴は,
レスポンスから見ていきましょう。
GetAllメソッドの戻り値はIEnumerable<Customer>,
表1 実際のHTTPレスポンス
メソッドの戻り値の例 | HTTPレスポンス | |
---|---|---|
IEnumerable<Customer>, Customer | 200 OK | 戻り値の値をJsonやXml等にシリアライズされたもの |
void | 204 No Content | なし |
ですが,
その場合は,
リスト3 404 NotFoundを返すコードの例
// GET api/customer/5
public Customer GetCustomerById(int id)
{
// ...データが見つからなかった場合
throw new HttpResponseException(HttpStatusCode.NotFound);
}
次はリクエストを見てみましょう。
GetCustomerByIdメソッドの引数はint型のid,
デフォルトでは,
表2
メソッドの引数の例 | 代入されるHTTPリクエストの値 |
---|---|
int, | QueryStringの値, |
例のCustomerクラスの様な複合オブジェクト | Bodyの値 |
もちろん,
以上,
この後は,
検証機能
リクエストの値を検証しなければならないことは少なくありません。
ASP.
リスト4 検証属性を付与したCustomerクラス
public class Customer
{
public int Id { get; set; }
[Required(ErrorMessage = "{0} は必須項目です")]
[StringLength(50, MinimumLength = 6)]
public string Name { get; set; }
public string Address { get; set; }
[Range(1, 10)]
public int Point { get; set; }
}