ホームページ >バックエンド開発 >PHPチュートリアル >Restful API エラー プロンプトが返される実装のアイデア
Weibo であれ、淘宝網であれ、独自のエラー戻り値の形式仕様とエラー コードの説明があり、携帯電話で使いやすいだけでなく、人々に明確で高級感を与えます。 。問題に遭遇したときは、まず親会社に相談するのが大企業の規範です。この目的のために、私はタオバオのエラー戻り値の形式を模倣し、Weibo エラー コードで設定された標準に基づいて独自のエラー コードをカスタマイズし、Restful API でテストしました。以下に実装アイデアとテスト結果を紹介します。
このようなエラー戻り値を実装するために抽象ファクトリパターンを使用します。このパターンを選択したのは、このパターンが一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供しており、これが私のニーズに非常に近いからです。
1. このパス共通ヒントに従って、エラー プロンプト プログラム ファイルを保存するための新しいエラー フォルダーを作成しました。このフォルダーには主に次のファイルが含まれています:
2. Hint.php エントリ ファイル。抽象クラスを定義し、その中にメソッドを 1 つだけ記述します。
interface Hint { function Error($_errors,$code);}
3. Template.php は Hint インターフェースを実装します。エラー戻り値の形式はここで定義されます。
class Template implements Hint{ function Error($_errors,$code) { if (empty($_errors)) { print_r(json_encode([])); } else { $errors['error']['name'] = 'Not Found'; $errors['error']['message'] = $_errors; $errors['error']['error_code'] = $code; print_r(json_encode($errors)); } }}
4. createMsg.php 別の createMsg 抽象クラスを作成します。オブジェクトの作成をインターフェイスに抽象化します。
interface createMsg { function Msg(); }
5. FactoryMsg クラスを使用して createMsg インターフェイスを実装します。インスタンス化されたテンプレートを返します。
class FactoryMsg implements createMsg{ function Msg() { return new Template; }}
6. ErrorMsg.php はテンプレートの Error メソッドにパラメータを渡します。
rree7.呼び出し方法。
うわー8. テスト結果。
りー完了。私は実装プロセス全体で言語パックの形式を使用します。これにより、後の多言語切り替えが容易になります。
class ErrorMsg { // 抽象工厂里的静态方法 public static function Info($_errors) { $Factory = new FactoryMsg; $result = strstr($_errors,Yii::t('yii','Not exist')); //数据不存在 20001 $result1 = strstr($_errors,Yii::t('yii','Null')); //参数不能为空 20002 $result2 = strstr($_errors,Yii::t('yii','Fail')); //新增、更新、删除失败 20003 $result3 = strstr($_errors,Yii::t('yii','Not right')); //XX不正确 20004 $result4 = strstr($_errors,Yii::t('yii','Robc')); //XX无权限 20005 //数据不存在 20001 if(!empty($result)){ $M = $Factory->Msg(); $M->Error($_errors,'20001');die; } //参数不能为空 20002 if(!empty($result1)){ $M = $Factory->Msg(); $M->Error($_errors,'20002');die; } //新增、更新、删除失败 20003 if(!empty($result2)){ $M = $Factory->Msg(); $M->Error($_errors,'20003');die; } //XX不正确 20004 if(!empty($result3)){ $M = $Factory->Msg(); $M->Error($_errors,'20004');die; } //XX无权限 20005 if(!empty($result4)){ $M = $Factory->Msg(); $M->Error($_errors,'20005');die; } //默认类型 21000 $M = $Factory->Msg(); $M->Error($_errors,'21000'); }}2. 実装プロセスでは、将来の多言語切り替えの問題は考慮されず、プロンプトは従来の方法で直接送信されました。例: ErrorMsg::Info("Operation failed"); この方法では、複数言語の切り替えを実現できません。言語パックを使用してパラメーターを渡すことをお勧めします。
関連情報
1. Weibo オープン プラットフォーム: http://open.weibo.com/wiki/Error_code
2. タオバオ オープン プラットフォーム: http://open.taabao.com/doc2/apiDetail.ht ..
3. PHP の単純なファクトリ パターン、ファクトリ メソッド パターン、および抽象ファクトリ パターンの比較: http://www.phpddt.com/php/php-factory.ht...