ホームページ >バックエンド開発 >PHPチュートリアル >Restful API エラー プロンプトが返される実装のアイデア

Restful API エラー プロンプトが返される実装のアイデア

WBOY
WBOYオリジナル
2016-06-23 13:10:251077ブラウズ

まえがき

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 メソッドにパラメータを渡します。

rree

7.呼び出し方法。

うわー

8. テスト結果。

りー

完了。私は実装プロセス全体で言語パックの形式を使用します。これにより、後の多言語切り替えが容易になります。

FAQ

1. この種の文字列あいまい検索の使用は非常に一般的であり、特定のエラー タイプに対応する特定のコードを返すという要件を満たすことはできません。より良い提案がございましたら、ぜひご提案ください。

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...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。