質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2884閲覧

WebApiの「~しているかどうか?」判定を実行した際のエラーコードの分岐

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2015/02/13 11:56

編集2015/02/14 07:05

現在WebApiのラッパーライブラリを作成中です。

WebApiで、「すでに~済みの場合は、ステータスコード204を返す」というのがあります。
こういう時、返ってくるステータスコードによりどのような設計にすればいいのかがわからず困っています。

このwebApiでは、返ってくる可能性のあるコードは「200、201、204、400、401、403、404、500」です。

(疑問1)
ステータスコードが200201で返ってきた場合でも、trueを返した方がいい?

(疑問2)
400,500番代は、すべてfalseで返してもいい?
試しに「まだ~していない」場合のパターンを実行してみると404が返却されました。
一律falseを返すと、Httpのエラーでfalseなのか「まだ~していない」からfalseなのかわからなくなりますが、大丈夫でしょうか?

それとも、404だったらfalse、それ以外のエラーだった場合はexceptionにした方がいいのでしょうか?

以上、ご教授お願いします。

[2015/02/14 追記]
CertaiN さん
回答有難うございます。

ライブラリ利用者が使用する場合のイメージは↓のような感じでしょうか?

lang

1$api = new myApi(); 2// ユーザをフォロー済みかどうかを判定しようとしています。 3try { 4 if($api->isUserFollow($user_id)) { 5 //ユーザをフォロー済みの時の処理 6 } 7} catch( HttpException $e) { 8 // HttpException は自作例外です。 9 10 if($e->getStatusCode() === 404) { 11 // ユーザを未フォローの時の処理 12 } else { 13 // 例外処理 14 } 15}

上記のように、何かを判定する場合の404はステータスコード上では、確かに不正なリクエストです。
しかし、判定させているApiの場合は**正しく不正リクエストしている(?)**という感じがしています。(その扱いで、少しモヤモヤしています…)
意図した不正リクエストだから、falseでもいいのかなーと悩んでいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず一律に、不正なリクエストの場合は「falseを返す」「Exceptionをスローする」のどちらか一方に統一すべきでしょう。特殊な目的が無ければ処理方法に関して一貫性は必要だと思います。

処理フローの提案

lang

1Q. レスポンスコードが400未満か? 2 はい: 正常なので結果を返す 3 いいえ: レスポンスコードをException生成時の第2引数にセットしてthrowする

投稿2015/02/14 00:57

mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/02/14 07:11

回答有難うございます。 一貫して`Exception`にしようかと思います。 ただ、まだ少し疑問があるので質問に追記させてもらいました。 再質問となってしまいますが、よろしくおねがいします。
mpyw

2015/02/15 02:52

「意図した不正リクエスト」の意味がよく分からないのですが… あるユーザの情報を取得しようとして、そのユーザが存在するかどうかは、(既に自分がそのSNSやユーザについてよく知っていなければ)「リクエストしてみるまで分からない」が正しいのではないでしょうか。
退会済みユーザー

退会済みユーザー

2015/02/15 04:50

200番代 → true 404番 → false 400番代(404以外) → Exception 500番代 → Exception で悩んでいたのは、 指定ユーザが存在し、そのユーザをフォローしている:204 (※) 指定ユーザが存在し、そのユーザをフォローしていない: 404 指定ユーザが存在しない:404 (このパターンを忘れてた) ※このリクエストの場合のみ、falseでわかったほうがいいのかな~と考えていたからです。 使いたいApiの説明には、フォロー済みだったら204を返すとしか説明がありませんでした。 でも確かに、フォローしている場合204を返すだけで ・ユーザが未登録で404なのか ・存在するユーザだけどフォローしていないから404なのか リクエストしてみなきゃわからないですね。 正常の時は、responseを返して、 400、500番代が発生したら、Exceptionをthrowすることで統一しようかと思います。 スッキリしました。回答有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問