2017-06-12 3 views
0

私は新しくapisを公開しています。現在、ExpressでRESTful APIを構築しています。たとえば、これが私のモデルだとしましょう。私は羊を作成するように、idで羊を読んIDで羊を更新し、私は私のAPIに含まれるべきであるが、他の操作がされているIDで羊を削除し、this tutorialから見た基本的なCRUD操作とは別にRESTful APIにはどのような操作が必要ですか?

Sheep = { 
name: String, 
age: Number, 
color: String 
} 

特に、私は羊を名前/年齢/色で見つけるための経路を作るべきかどうか、そしてベストプラクティスではその経路をどのように扱うべきかと思っています。

私はおそらく情報が不足していますが、上のチュートリアルでは、idによって羊を見つけるルートは"/sheeps/:sheepId"です。私はどのように名前で見つけるためのルートを作りますか?もし私が"/sheeps/:sheepName"をしたら、idで羊を見つけるのと同じではないでしょうか?私は私のブラウザに行って、例えば:"localhost:8080/sheeps/someNameOrId"と言います。ブラウザか、特にクライアント側が、

AngularJSを私のクライアントとして使用していれば、より役立つ回答を得ることができます。

答えて

0

まず、RESTは標準とベストプラクティスを持っていますが、プロトコルではありません。だから、人々は問題に対する別の解決策を提案するかもしれない。

ここであなたの質問にお答えしますが、原則として、uriは操作を行うリソースを表す必要があります。検索やフィルタリングなどのクエリパラメータがある場合とない場合があります。 したがって、/ sheeps/{sheep id/name}の表現はヒッピーに最適です。 ??

  • /羊sheepId = '123' AND /羊sheepName = 'イブ'
  • /羊/ {:今、あなたの問題文に、以下の実施の有効なRESTfulな方法かもしれませんsheepId} AND /羊/名前/ {} sheepName

文法的には、彼らはすべての罰金です。さて、RESTという言葉に集中することなく考えてみると、私たちの選択肢の両方でAPIのパフォーマンスが同じになることがわかります。ですから、わかりやすいということは、どのオプションが私たちが行っていることをよりよく理解できるかということです。どちらの場合も、プログラマが私たちが何をしているのかを簡単に理解できると思います。

したがって、1つのオプションだけが正しいと思っている場合は削除して、より良いと思うものを選択してください。

上記の実装で気づくべきことは、/ sheeps?sheepId = '123'のような検索を実行したときに、パラメータに一致するものが見つからない場合、204 No Contentを渡すのが理想的です。 /sheeps/{sheepId}の場合、404が見つかりません。 あなたのケースではもっと意味がありますか?あなたの理解に従って選択してください。

これはsheepIdとsheepNameの競合のためのものです。名前/年齢/色で羊を飼う必要があるので、以下のアプローチは非常に論理的です。 ?

  • /羊年齢= '5'
  • /羊色= '黒'
  • /羊年齢= '5';?色= '黒'
0

あなたは非常に古典的なケースで、各オペレーションにRESTfulなリソースを書く必要があります。あなたが正しく言ったように、あなたがIDか名前を渡しているかどうかをRESTが知る方法はありません。理想的には、この場合、リソースごとに操作をグループ化する必要があります。または "/羊/ /:sheepName":あなたのケースでは

は、あなたは、あなたが "sheepID /羊/ /ID" としてあなたのRESTリソースを記述する必要がある、CRUD byIdまたはBYNAMEを行う必要があります。

関連する問題