2017-03-06 4 views
0

RESTful Web APIのベストプラクティスについていくつか質問があります。Web APIが単純なCRUDでない場合はどうすればよいですか?

インターフェイスを簡素化するために、GET,PUTおよびPOSTなどのHTTPプロトコルを使用することが標準と思われます。

GET /チケット - チケット
GET /チケット/ 12のリストを取得します - 特定のチケットに
POST /チケットを取得します - 新しいチケットを作成します
PUT /チケット/ 12 - アップデートチケット#12
PATCH /チケット/ 12 - 部分的にアップデートチケット#12
DELETE /チケット/ 12は - チケット#12

を削除します。しかし、私の最初のAPIを開発してしばらく過ごした後、私は本当にそれは私が落ちる感じませんそのようなきちんとしたデザイン。

私のAPIはの追加または更新をサポートしています。呼び出し元は一度に任意の数のLineItemを追加または更新できます。さらに、番号を確認または取り消すことができます。追加および更新の場合、多くの追加の関連データも供給されている。確認や取り消しのために、必要なデータはずっと少なくて済みます。

これは、上記のチケットインターフェイスにどのように適合しますか?私は悪いWeb APIを作成していますか?受け入れられた基準は他のバリエーションを考慮していますか?これについて議論する良いリンクはありますか?

+0

POST /チケット/ 12 /ライン - 。チケットの下に新しい行を作成します12 – benPearce

+0

あなたはおそらく、リンクを尋ねることは話題外であると知っているはずです... –

答えて

1

オブジェクト全体のCRUDタスクよりも具体的なタスクを行うメソッドをクラスに持たせることができます。だから、あなたのTicketオブジェクトは、ラインのアイテムを持っていると仮定して、あなたはPUTを持っているかもしれないようにURIを呼び出します。

PUT /チケット/ 12 /のLineItemコードで名= BLAH &アドレス= FOO

あなたの方法でしょうか?それで何かのようになります

public class TicketController 
{ 
    [HttpPut] 
    [ActionName("LineItem")] 
    public HttpResponseMessage UpdateLineItem(int id, string name, string address) 
    { 
     // Do stuff here. 
    } 
} 

明らかにあなたの他の方法もそこに入れます。おそらく、それを変更して、広告申込情報の情報がURIではなくPUTまたはPOSTの本体を経由するようにしたいのですが、URI引数の仕組みも表示すると便利です。

問題LineItem sがTicket秒に関連ていない場合は、あなたがそれらを置くためにいくつかの他のコントローラを見つける必要があり

+0

アクション 'LineItem()'の名前を単に付ける代わりに、ここで 'ActionName'属性を使用した理由を明確にすることはできますか?ありがとう。 –

+0

どちらもうまくいくはずです。これは、開発者の好みと、チームがコーディング/ Web API標準にどれくらい緊密にこだわっているかにかかっています。皆さんがPUT == Updateを理解している限り、あなたは大丈夫ですし、メソッド名にそれを入れる理由はありません。しかし、それでもCode Lensや他のツールを使ってLineItemメソッドを見つけたら、クラスに入るまで[HttpPut]デコレーションは表示されません。このアップデートでは、メソッドが何をするのかが少し明確になっています。無関係で、@ benPearceのコメントごとのチケットIDを含める必要があります。私はそれを示すために私の答えを修正します。 – Necoras

関連する問題