RESTful アーキテクチャ は、人気のあるインターネット ソフトウェア アーキテクチャであり、明確な構造を持ち、標準に準拠しており、理解しやすく、拡張も容易です。
REST は Representational State Transfer の略語で、「プレゼンテーション層の状態変換」と訳されます。プレゼンテーション層は実際にはリソースなので、「リソースの状態の変換」として理解できます。
Web アプリケーション上のあらゆるエンティティは、URI (Uniform Resource Locator) によって指定されるリソースと見なすことができます。
まえがき
Weibo であっても、淘宝網であっても、独自のエラー戻り値の形式仕様とエラー コードの説明があり、携帯電話で使いやすいだけでなく、人々に明確で高級感を与えます。 。問題が発生した場合、まず親会社に相談する必要があります。大企業の規範は、私たちにとって親会社です。この目的のために、私はタオバオのエラー戻り値の形式を模倣し、Weibo エラー コードで設定された標準に基づいて独自のエラー コードをカスタマイズし、Restful API でテストしました。以下に実装アイデアとテスト結果を紹介します。
実装アイデア
このようなエラー戻り値を実装するために抽象ファクトリパターンを使用します。このパターンを選択したのは、このパターンが一連の関連オブジェクトまたは相互依存オブジェクトを作成するためのインターフェイスを提供しており、これが私のニーズに非常に近いからです。
コード分析
1. このパス共通ヒントに従って、エラー プロンプト プログラム ファイルを保存するための新しいエラー フォルダーを作成しました。このフォルダーには主に次のファイルが含まれています:
2. Hint.php エントリ ファイル。抽象クラスを定義し、その中にメソッドを 1 つだけ記述します。
interface Hint { function Error($_errors,$code); }
3. Template.php はヒントインターフェイスを実装します。エラー戻り値の形式はここで定義されます。
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 メソッドにパラメータを渡します。
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'); } }
7.呼び出し方法。
えー
8. テスト結果。
りー
完了。私は実装プロセス全体で言語パックの形式を使用します。これにより、後の多言語切り替えが容易になります。
FAQ
1. この種の文字列あいまい検索の使用は非常に一般的であり、特定のエラー タイプに対応する特定のコードを返すという要件を満たすことはできません。より良い提案がございましたら、ぜひご提案ください。
use common\hint\error\ErrorMsg; ErrorMsg::Info(Yii::t('yii','failure'));
2. 実装プロセスでは、将来の多言語切り替えの問題は考慮されず、プロンプトは従来の方法で直接送信されました。例: ErrorMsg::Info("Operation failed"); この方法では、複数言語の切り替えを実現できません。言語パックを使用してパラメーターを渡すことをお勧めします。
上記は、Restful コンテンツを含む、PHP での Restful API エラー プロンプトの戻り値の実装アイデアを紹介したもので、PHP チュートリアルに興味のある友人に役立つことを願っています。