2017-01-09 9 views
0

私はNodeJSでAPIを構築しています。作成したインターフェイスに正しいHTTPリターンを使用したいと思います。私は、サイトに表示されている掲載スペースを使用しています:成功へのRESTful API 404それは正しいですか?

私の質問を: 私はアヤックスとの "のcheckEmail" APIを構築しました。ページはサーバーを呼び出し、ユーザーが入力した電子メールが存在するかどうかをチェックします。理論的には、リソースが見つからない場合、私は404を返すべきです。もし電子メールが存在しなければ、私は404を返します - この場合、ユーザの成功です(彼はこの電子メールを使うことができます)。ただし、電子メールが存在する場合は200が返されます。これは、電子メールがすでに使用されており、ユーザーが別のものを入力する必要があるため、画面の目的でエラーを返します。最後のケースは、ユーザーが無効な電子メールを入力した場合です。この場合は、入力した内容が有効なメールではないことを示す500を返します。

この論理は正しいですか?私は成功のために404(この場合)を使用していて、失敗(電子メールが見つかった - 既に使用されている)のために200を使用しているので、疑いがあります。

ありがとうございました。

+0

要求が有効で、実際には成功した場合は常に応答します。電子メールが存在しないことを検証したい場合は、実際には存在しません。それは成功です。したがって、200を返します。存在すれば成功しません – baao

答えて

1

500を変更しないが、見つかったと示唆しているサーバのエラー、ユーザエラーの40-ために使用される400エラーなど無効な入力などのクライアントエラーを意味します。無効な電子メールの場合、クライアントは入力メールを変更して成功する可能性があるため、400家族になります。

データベースに存在しないオブジェクトについては、それが20xか404のどちらであるべきかについての議論があります。私は個人的には、ルートが存在しないように見える可能性があります。 (すなわち、ルートが/ users/{id}として定義されているときにuserS/1234の代わりに/ user/1234をタイプします)ほとんどのフレームワークは、ルートテンプレートが存在しない場合、404 catch allを持ちます。途中の逆プロキシが異なるAPIサーバーにルーティングされる可能性があります。ルートテンプレートが正しいか、オブジェクトがDb内に存在しないかを知りたいのですが

あなたは204(No Content)を使用することができます。つまり、ボディにはコンテンツがありません(しかし、データベースには含まれません)。これは、削除されたものを返さないDELETEオブジェクトのバック204は、純粋なAJAX APIではなくブラウザでより意味がありますが、それは間違いなく機能します。また、プラン200を使用することもできます。

-2

500 iはボットケース200は、(内部例外のような)のみサーバーエラーに使用されるべき身体結果を

関連する問題