小さなノートを学ぶのRESTfulなスタイル

参考资料:(1)https://maimai.cn/article/detail?fid=1362221525&efid=iwXvSE_vD9dNRUX_dboP1g(2)http://www.ruanyifeng.com/blog/2011/09/restful.html   (3)HTTPS: //www.cnblogs.com/duhuo/p/4245202.html

1、の概念

RESTfulなない技術ではなく、設計仕様インタフェースAPI。すべての仕様を満たすように設計され、それがRESTfulサービスのために考慮することができます。

しかし、エラーや実際の生産環境は完全に本物のRESTfulなスタイルのサービスを満たすので、RESTfulなを理解するために、各開発者のための特定のビジネスシナリオの存在によるものはあまりありませんが、それは必要ありません。しかし、実際の応用では、RESTfulな標準参照があってもよい、それは非常に必要です。

実際に仕事で、限りインタフェースAPIの仕様、命名、戻り値、特定の制約のオーソライズ検証、限り、最後には曖昧コールが存在しない一般的なプロジェクトのAPIのデバッグ、安全に十分な、強力なスタイル一貫可読性として私はそれが十分だと思います。インターフェイスは、およびでないコールに一般ユーザに開放人員です。

 

2、RESTとRESTful

2.1 REST(のRepresentational State転送)

REST:状態遷移のその特性は、インターネットソフトウェアアーキテクチャの原則です。原則に沿ったRESTフレームワークは、それはRESTfulなアーキテクチャである場合

RESTfulなを理解するには、適切にRESTの下に意味の特定を理解することが必要です。

(1)資源(リソース)

プレゼンテーション層における「プレゼンテーション層の状態遷移」のREST名は、実際には「リソース(リソース)」プレゼンテーション層のことをいいます。

いわゆるリソースは、実際にネットワーク上のエンティティ、またはネットワーク上の特定の情報です。これは、テキストの一部、絵、歌、サービスすることができます。あなたはそれを指し示すURI(ユニフォームリソースロケータ)を使用することができます。各リソースは、特定のURIに対応しています。

いわゆる「インターネットは、」彼のURIを呼び出して、インターネット上のインタラクティブな「資源」のシリーズです。

(2)プレゼンテーション層

「リソース」エンティティが外部症状の様々なことができる情報です。私たちは、「リソース」フォームの特定のプレゼンテーションは、「プレゼンテーション層」と呼んでます(表象)

たとえば、次のように形式をtxtをすることができ、テキスト、あなたはまた、JPG、PNG表現することができ、HTML、XML、JSON、あるいはバイナリ形式の画像を使用することができます。

URIは、リソースの物理的な位置を表し、彼のショーの形を反映していないかもしれません。厳密に言えば、「.htmlの」拡張子の最後のページの一部は、実際には、接尾辞の表現形式ので、必要はありませんカテゴリ『パフォーマンス層』に属します。したがって、ヘッダのHTTPリクエストと情報の特定の形態であるべきで受け入れのContent-Typeフィールドを指定しました。

これらの2つのフィールドは、プレゼンテーション層の記述です。

(3)変換状態(転送)

クライアントの代わりにWebサイトにアクセスし、この過程でインタラクティブなプロセスのサーバは、必然的にデータや状態の変化を伴います。

HTTPプロトコルはステートレスなプロトコルです。すべての状態がサーバーに保存されていることをこの意味。ために顧客がサーバーを操作するので、それは(状態転送)状態を発生変換するには、サーバーのためのいくつかの手段でなければなりません。そして、この変換は、プレゼンテーション層に基づいているので、「プレゼンテーション層状態変換」です。

これは、使用するクライアント、HTTPプロトコルのみを意味しています。具体的に、すなわち、HTTPプロトコルを使用して、4つの動詞の動作モードを示す:GET、POST、PUT、DELETE 。彼らは、4つの基本的な操作に対応します。(リソースへのアクセス)、POST、GET、PUT(更新リソース)(新規または更新されたリソースのリソースを、冪等するときに、新しいを持っていません)。

DELETE(削除リソース)

2.2 RESTfulな概要

RESTfulなアーキテクチャが何であるかの概要:2.1を総括するには

(1)各リソースを表すURI

クライアントとサーバの間の(2)は、リソースの転送にこのプレゼンテーション層を含み、

4つのクライアントHTTP動詞、サーバリソースの操作により、(3)。変換の状態を達成するためのプレゼンテーション層。

2.3 RESTfulな6つの原則

これは、アウトセット6つの原則のREST RESTの父であります

(1)CSアーキテクチャ

CS端子に格納されたデータは、C末端にのみ使用する必要があります。コードのC末端ポータビリティの両端のように完全に分離のメリットが強くなり、サーバーのスケーラビリティ前端部が強くなります。お互いを乱すことなく、両端の自主開発、。

(2)ステートレス

HTTPは、それ自体を要求するステートレス、CSベースのアーキテクチャ、識別するためにサーバーを可能にするのに十分な情報を持つクライアントのすべての要求です。クエリパラメータに必要な情報の一部は、リクエストURL年代、ヘッダ、divの中に含まれており、クライアントの状態を保存することなく、様々なパラメータに応じて要求することができ、サーバは、正しい応答がクライアントに返されます。堅牢性とスケーラビリティのステートレス機能が大幅にサービス側を向上させます。

もちろん、この全体的なステートレス制約は欠陥がある、すべてのクライアント要求は、送信データの冗長性が得られ、(これが必要です)自分のアイデンティティとステータスを決定するために、同じ情報を持って繰り返したが、このする必要がありますパフォーマンスと使用を決定するために、それはほとんど無視できる程度です。

(3)統一されたインタフェース

このコアは、RESTアーキテクチャで、統一されたインタフェースは、RESTfulなサービスのために非常に重要です。クライアントは唯一、可読性がコールを容易にするため、人員の使用をインタフェースを強化することができますインターフェイスを実装するに焦点を当てる必要があります。

(4)同一のデータ・フォーマット

サーバーは、返されたブログパーク運転データAPI、ポスト、プット、パッチのオープンプラットフォームで、興味の缶を見ていると、データ・フォーマットは、いずれかのJSON(データ収集)、いずれかのXMLで返すか、直接ステータスコードを返しますステータスコード。

自己記述情報、データの各項目は、その内容を処理し、解析を容易にする自己記述コードであるべきです。例えば、HTTPによるデータが[MIMEタイプ]情報は、我々は(データ、画像、動画やJSON、divのコンテンツを介してクライアント、クエリ文字列パラメータ、リクエストヘッダやURIの特定のフォーマット内のMIMEタイプから知ることができるリソース名返さ)状態を送信します。サーバーによって本部コンテンツ、およびクライアントへの最初の転送状態に応じて、応答コード。この技術はハイパーメディア(あるいはハイパーリンク)と呼ばれています。

上記に加えて、HATEOSはまた、その手段、必要な場合、また、関連するオブジェクトまたはオブジェクト自体を取得するためのURIを提供するために、リンクのdivリターン(又はヘッド)に含まれていてもよいです。これは、より詳細に説明します。

そのようなマイクロブログ情報要求として、サーバの応答が、このマイクロブログ、他のURLに関連する情報が含まれている必要があり、クライアントはさらに、目的の情報を得るために、これらのURLが開始を要求を使用することができ、別の例では、ページングは​​、返されたデータの最初のページから得ることができます。次URTも、この原理に基づいています。

(5)キャッシュ可能

ワールド・ワイド・ウェブ上で、クライアントは、ページの応答コンテンツをキャッシュすることができます。したがって、応答が明示的に定義する必要があるか、暗黙的にキャッシュされるように、クライアントが複数の要求に応じて、古いデータや汚れデータを使用できない場合、キャッシュは回避する必要があります。適切に管理されたキャッシュは、さらにパフォーマンスとスケーラビリティを向上させるために、部分的または完全に削除するには、クライアントとサーバとの間の相互作用かもしれません。

(6)符号化要求がカスタムコード(オプション)であることができます

クライアントへの一時的なサーバーを選択して、クライアントのいくつかの機能をカスタマイズし、拡張するために、クライアントが実行することを可能にする、いくつかの機能のコードを提供します。例えば、サーバが特定の機能を実現するために、クライアントが実行することを可能にするいくつかのJavaScriptコードを返すことがあります。ヒント:RESTアーキテクチャ、設計基準は、唯一のオンデマンドエンコーディングはオプションです。サービスは他の基準のいずれかに違反した場合は、厳密な意味でそれはRESTfulなスタイルと呼ばれることはできません。

ベストプラクティスの2.4 RESTfulな

(1)バージョン

githubのオープンプラットフォームとしてhttp://developer.github.com/v3/は
、URL、簡潔な、これだけ知っているのに使用され、一般的なプロジェクトに加えてバージョンV1、V2、V3?まあ、このプラスのバージョンに解放することですそれだけで大企業とのプロジェクトで使用することであろうと推定しています。リクエストヘッダの内部ではなく、通常はバージョン番号

(2)パラメータネーミング

キャメルケースのクエリパラメータは、メソッドを使用することができる、下線の命名を使用することもできます。

例えば:

HTTP:今日のユーザーの着陸取得//example.com/api/users/today_login
HTTP://example.com/api/users/today_login&sort=login_descは本日、降順ユーザのログイン、ログイン時間を取得します

(3) URLの命名

APIの命名規則は、方法を採用し、シンプルで明確な、それを維持する必要があります。RESTfulなアーキテクチャでは、各リソースのURLのURLを表すので、唯一の名詞を動詞を持つことができない、また、複数名詞を使用する必要があります。実装は、これらのリソースを操作することができ、適切な動詞のHTTP GET、POST、PUT、PATCH、DELETE、HEADを使用する必要があります

非標準のURL、冗長性は意味がない、フォームが固定されていない、別の開発者は、呼び出す前に文書を理解する必要があります。

しかし、URLの終わりまでに、多くの場合、一般的な業務管理の背景にプラスインターフェースを区別するために/削除/更新/リストの方法を追加します(これは、特定の読みやすさを持っています)

以下のような:

 

 

 RESTfulなURL、定形、読めるのための標準化した後。名詞と動詞のHTTPリクエストは、これらのリソースの操作で測定することができます

 

 

 (4)は、統一されたデータ形式を返します

正当な要求は、ここで示された統一データフォーマットは、JSONで返す必要がありますについて

  • HTTPレスポンスのステータスコードを含むcode--整数型。
  • 「成功」、「失敗」または「エラー」:ステータス - テキストが含まれています。、「失敗」として500-599の間の応答のHTTPステータスコードが「エラー」400から499までの間、他は(ステータスコード1XX、2XX、及び3XXに応答して、例えば:)「成功」です。この事実は、中に起こることができない実際の状況に基づいています。
  • 表示エラーメッセージに使用された場合message--状態は「失敗」と「エラー」が効果的です。一方のみ、または両方を含むが含まれており、セパレータで分離されてもよい情報の番号またはコードを含んでいてもよい国際(il8n)標準を参照します。
  • data-- divの応答を含みます。状態が「失敗」または「エラー」である場合には、のみからなるデータは、エラーまたは例外名の原因、またはnullも可能です

正常な応答JSON形式を返します。

失敗応答形式のJSONを返します。

 

 

 もちろん、あなたも実際の状況に応じて自分のビジネスを拡大することができ、ビジネスユニットの作者、一貫した戻り、次の形式:

{
  ERRNO:0、//エラーコード成功0、失敗の他の(インターフェイスエラー、サービス利用不能)
  MSG:**は、//エラーメッセージは、一般的にユーザに提示されません。フロントエンド処理ロジックはそれに応じて、この情報に基づいてもよい
  showMsg:**、//エラーメッセージを表示し、一般的にユーザに表示するために使用され
  errTag:成功または失敗//成功のための一般的な状態フラグ
  データ:** / /リターン・データ、典型的には、データフィールドに入力します。何もデータが返されない場合は、ヌル値に設定されています
}

これは、コントローラ層が戻ったときにラッパー・オブジェクトがインスタンス化された呼び出しに対応するコードの後端部に封入することができます。

(5)HTTPステータスコード

通常、レスポンスステータスコードによって彼の要求成功応答ヘッダーかどうかを知ることができます。返された統一ステータスコード(4)は、HTTPステータスコードの内訳です。

 

 

 

 一般的なHTTPステータスコードは次のとおりです。

  • 1 **の要求は成功しませんでした
  • リクエストが成功した2 **、ステータスコードの処理が成功した要求を示します。
  • 3 **要求は、要求を満たすために、リダイレクトされるさらなる操作の必要性を示しています。一般的に、リダイレクトのためにこれらのステータスコード。
  • 4 **リクエストエラーステータスコードは、処理サーバを防止する、要求が間違っている可能性が示しています。                                                                                                                                                                                                                                                                         404:ページが存在しないか、削除されました。                                                                                                                                                                                                                                                                                                                                                               403:リソースは、利用できないサーバー顧客の要求を理解しますが、エラーが原因で通常ため、サーバーの設定WEBアクセス上のファイルやディレクトリのパーミッションを、それに対処することを拒否しました。                                                                                                                                                                                                           405要求を許可しない方法の種類を示します。
  • 5 **(サーバーエラー)これらのステータスコードは、要求を処理しようとしているときに内部サーバーエラーが発生したを示しています。これらのエラーはありませんリクエストで、間違ったサーバー自体であってもよいです。                                                                                                                                                                                                         502  :不正なゲートウェイエラーが指すゲートウェイゲートウェイは無効です。それは通常(無応答上流のサーバがダウンしていることを意味するものではないゲートウェイ /プロクシ)が、上流のサーバおよびゲートウェイ/交換データの矛盾に使用するプロキシプロトコル。                                                                                                                                                     504:エラー手段ゲートウェイタイムアウト(ゲートウェイタイムアウト)を指すサーバーゲートウェイまたはプロキシとしてではなく、上流のサーバから適時の要求を受信しませんでした。

(6)使用の合理化クエリパラメータ

ときに要求されたデータは、クライアントは多くの場合、データとページング要件、HTTPクエリパラメータの方法を推奨しているパラメータをフィルタします

 

 

タブ付きについて最高のエリアボーエンのリストを取得するためにブログページの公園オープンプラットフォームを参照してください
HTTP:// api.cnblogs.com/api/blogposts/@picked?pageIndex={pageIndex}&pageSize={pageSize} 
の例に戻ります:
[ 
{
「ID」: 1 
「タイトル」:「サンプル文字列 2 」、
「URL」:「サンプル文字列 3 」、
「説明」:「サンプル文字列 4 」、
「作者」:「サンプル文字列 5 」、
「BlogApp」:「サンプル文字列 6 」、
「アバター」:「サンプル文字列 7 」、
「POSTDATE」:「 2017-06-25T20:13:38.892135 + 08:00 」、
「再生回数」: 9 
「CommentCount」: 10 
「DiggCount」: 11
}、
{
「ID」: 1 
「タイトル」:「サンプル文字列 2 」、
「URL」:「サンプル文字列 3 」、
「説明」:「サンプル文字列 4 」、
「作者」:「サンプル文字列 5 」、
「BlogApp」:「サンプル文字列 6 」、
「アバター」:「サンプル文字列 7 」、
「POSTDATE」:「 2017-06-25T20:13:38.892135 + 08:00 」、
「再生回数」: 9 
「CommentCount」: 10 
「DiggCount」: 11
}
]

 

 

おすすめ

転載: www.cnblogs.com/yuerugou54/p/11830886.html