REST API の紹介。 REST API 設計のベスト プラクティス Rest API の説明

ゴロヴナ / 連絡先
インターネットのロシア部分には、SOAP および XML-RPC に基づく Web サービスに特化した記事が多数ありますが、全世界 (またはより広範ではない) REST アーキテクチャに関する記事はおそらく何もありません。

この記事では、このアーキテクチャの基本、その可能性、応用について説明します。

レストとは何ですか?

REST (Representational state transfer) は、Web サービスを呼び出すために使用される、World Wide Web などの分散システム用のソフトウェア アーキテクチャのスタイルです。 REST という用語は、HTTP プロトコルの作成者の 1 人である Roy Fielding によって 2000 回以上も生み出されました。 REST をサポートするシステムは RESTful システムと呼ばれます。

REST オプションには、追加の内部処理を行わずに情報を管理するための非常にシンプルなインターフェイスが備わっています。 各情報は、URL などのグローバル識別子によって一意に識別されます。 各 URL は、独自の方法で厳密なタスク形式を持っています。

そして今、最も明確に:

追加の内部検索が存在するということは、データ自体と同じ方法でデータが転送されることを意味します。 トブト。 SOAP や XML-RPC のようにデータを XML に書き込むことはなく、Flash などのように AMF も使用しません。 データそのものを与えるだけです。

各情報は URL によって一意に識別されます。つまり、URL が情報の主キーになります。 トブト。 たとえば、警察手帳の 3 冊目は /book/3 のようになり、この本の 35 ページ目は /book/3/page/35 のようになります。 Zvіdsiy終了タスク形式。 さらに、アドレス /book/3/page/35 にデータがどのような形式で配置されているかはまったく問題ではありません。HTML、jpeg ファイルとしてスキャンされたコピー、または Microsoft Word ドキュメントの場合もあります。

サービスによる情報の管理方法は、完全に転送プロトコルに基づいています。 最も先進的なプロトコルは明らかに HTTP です。 したがって、HTTP の場合、データに対するアクションは、GET (削除)、PUT (追加、置換)、POST (追加、変更、削除)、DELETE (削除) のメソッドによって決定されます。 したがって、CRUD (作成、読み取り、更新、削除) 操作は、GET や POST を含む任意の数のメソッドを使用して完了できます。

アクスルはお尻から見るとこんな感じです。

GET /book/ - 既存のすべての書籍のリストを取得します
GET /book/3/ - 本番号 3 を取得します
PUT /book/ - 本を追加します (ユーザーからのデータ)

DELETE /book/3 – ブックを表示

重要な追加:これらは REST パターンと呼ばれ、解読する必要がある HTTP メソッドに関連しています。 もっと身近なところでは、モデルによって POST と PUT が異なる方法で見られます。 ただし、PUT は作成、再生、更新には割り当てられませんが、POST には割り当てがありません (POST 操作は非常に一般的なものであり、特定の意味を付加することはできません)。 したがって、私の例はこの形式では正しく、POST と PUT を同じ意味で意味しているかのようになります。

もう一度言いますが、POST はすべての変更を同時に変更できます。
POST /book/ – 本を追加します(データが要求されます)
POST /book/3 – 本を変更します(データが要求されます)
POST /book/3 – 本を削除します(本文は空になります)

これにより、PUT および DELETE の問題に関連する不快な瞬間を無視できることがあります。

日常的な Web サービスのための REST wiki。

ご存知のとおり、Web サービスは World Wide Web 上で動作するアドオンであり、Web サービスへのアクセスは HTTP プロトコル経由で提供され、情報の交換は追加の XML 形式で行われます。 したがって、本文に転送されるデータの形式は常に XML になります。

スキン情報ユニットには 5 つのアクションが示されています。 そしてあなた自身にも:

情報を取得/ (索引)- すべてのオブジェクトのリストを表示します。 許しを請う、それだけです。 識別子とオブジェクト名のフィールドのみを配置し、他のデータは配置しません。

GET /info/(id) (ビュー)- オブジェクトに関する詳細情報を取得します。

PUT /情報/それとも 投稿/情報/ (作成する)- 新しいオブジェクトを作成しています。 データは、urlencode を使用して、コーディングなしで本体内で送信されます。 PHP では、本文は次のように記述できます。

関数 getBody() (
if (!isset($HTTP_RAW_POST_DATA))
$HTTP_RAW_POST_DATA = file_get_contents("php://input");
$HTTP_RAW_POST_DATA を返します。
}

POST /info/(id)それとも PUT /info/(id) (編集)– 識別子 (id) を使用してデータを変更し、場合によってはそれらを置き換えます。 データはリクエストの本文でも送信されますが、PUT モードには重要なニュアンスがあります。 右側では、POST リクエストは urldecoded-post-data の存在を送信します。 トブト。 コードを停滞させなければ、標準には違反しません。 ここでは、彼らが望む人が誰であれ、彼らは標準への敬意を示さず、あたかも変化後であるかのように強硬主義者です。

/情報/(id)を削除 (消去)– 識別子 (id) からデータを削除します。

アプリケーション /info/ では、URL に表示できる (表示される可能性がある) 他の情報に基づくことができることをもう一度指摘しておきます。

/data/4/otherdata/6/info/3/ … 以上です。

このコンセプトから得られるもの:

どうやら、REST アーキテクチャは開発という点では非常にシンプルです。 プロンプトを見れば、形式 (SOAP、XML-RPC の場合) を理解していなくても、何が機能しているかがわかります。 データは追加のデータを保存せずに転送されるため、REST は、何を行うかを理解するための解析を必要とせず、ある形式から別の形式にデータを転送する必要がないため、リソースの消費量が少ないと考えられます。

停滞よりも現実的です。

サービスの主な利点は、Web サイト、フラッシュ、プログラムなどのシステムによって処理できることです。 XML を解析するメソッドのフラグメントと HTTP の vykonannya リクエストが近い将来に登場します。

REST アーキテクチャを使用すると、タスクを大幅に簡素化できます。 特に機能面ではそうですが、ほとんど記述されておらず、情報を変更する権限を誰かに与えることはできないとしても、認可と認証も必要になります。 これは、他のタイプのセッションまたは HTTP 認証のみを使用して簡単に実行できます。

REST API (Representational State Transfer)、または RESTful Web サービス、それは何ですか? REST は英語から「スタンへの代表的な送信」と訳されます。 これは、インターネット上のコンピュータ システム間の対話を保証する方法です。 REST ベースの Web サービス。テキストベースの Web リソースの消費、アクセスの拒否、およびそれらの処理、vikoryst および統合された操作をシステムに許可します。 WSDL や SOAP など、その機能と追加の操作セットを組み合わせた他の形式の Web サービスを検討してください。

REST API: それは何ですか? わかりました

Web リソースは主に、URL によって識別されるドキュメントまたはファイルとして World Wide Web から識別されます。 今日の悪臭は、より曖昧で抽象的な意味である可能性があります。それは、メレジで特定され、名前が付けられ、対処され、収集される皮膚の対象と現実の匂いです。 REST API Web サービスは、XML、HTML、JSON、またはその他の形式でフォーマットできる URI リソースで応答を要求します。 保存されているリソースに変更が加えられたことを確認したり、他の関連リソースやそのコレクションにハイパーテキスト メッセージをプッシュしたりできます。 最も拡張されたプロトコルとしての HTTP の使用は、コマンド PUT、DELETE、HTTP GET、POST で示される利用可能な操作の種類まで拡張されます。

規制のない勝利プロトコルは標準的な運用になるでしょう。REST システムは、生産性、信頼性、可用性を向上させ、システムに固執することなく使用および更新できる vikoristan コンポーネントの反復方法の成長を目指しています。 REST Web サイトは、多くの場合、SOAP (Simple Object Access Protocol) スタイルの方がシンプルで重要性が低くなりますが、REST ネットワークには帯域幅コストがかからないため、インターネット上の Web サイトにより適しています。 SOAP アプローチの場合、サーバー プログラム (データを提供するため) とクライアント プログラム (データを保存するため) を作成または作成する必要があります。

技術の歴史

「代表者の国への移転」という用語は、2000 年にロイ フィールディングによって「エッジ ソフトウェア アーキテクチャのアーキテクチャ スタイルとデザイン」という論文の中で導入され、造語されました。 私たちは、メイン プロジェクト HTTP 1.0 1996 に基づいて、HTTP 1.1 1996 ~ 1999 と並行して REST アーキテクチャ スタイルを開発しました。 フィールディング氏はテクノロジーの発展を振り返り、HTTPの標準化の過程でインターネット上の設計の選択肢を盗む可能性があったと述べた。 これは、スウェーデンがどのようにしてこのガルーサの中心になるかというテーマについて誰からの提案も受け入れるプロセスの枠組みの中で非常に複雑なプロセスです。

500 人を超える寄稿者からのコメントをフィードします。寄稿者の多くは広範な知識を持つ熱心なエンジニアです。 Web インタラクションの抽象的な理解から HTTP 構文の正確な詳細まで、すべてを説明するのはあなた次第です。 このプロセスにより、このモデルは、現在 REST と呼ばれる原則、原理、フレームワークの中核となるセットに洗練されました。

利点

REST スタイルの特徴は、次のアーキテクチャ原則に由来しています。

  • 生産性 - 生産性と有効性の尺度の管理におけるコンポーネントと支配的な権限の相互作用。
  • 最大数のコンポーネントをサポートし、REST API とコンポーネント間の対話をテストする拡張性。
  • 単一のインターフェースと認可 REST API のシンプルさ。
  • 特定のニーズを満たすためのコンポーネントの変更 (プログラムの実行時)。
  • 倉庫とサービスエージェント間のコミュニケーションの可視化。
  • プログラム コードをデータとともに移動するコンポーネントを移植する機能。
  • 信頼性 - 倉庫内での障害、切断、またはデータが発生した場合の障害に対する高い耐性。

クライアント間の問題の範囲は、REST API によってコンポーネントの実装を実感できるようになり、コネクタのセマンティクスの複雑さが変更され、生産性調整の効率が向上し、純粋なサーバー コンポーネントのスケーラビリティが向上するという事実によって説明されます。 コンパクトなシステム相互接続により、プロキシ仲介者、ゲートウェイ、およびファイアウォールがコンポーネント間のインターフェイスを変更せずにさまざまなポイントで通信できるようになり、REST 転送を実行したり、大規模なキャッシュの助けによる生産性を実感したりすることができます。 REST API が適用されるのは、対話がリクエストの形式ではない場合、セマンティクスと情報交換の定義に標準的なメソッドとメディアの種類が使用され、結果がキャッシュを明示的に示すためです。

形式的および建築的な境界

RESTful システムは 6 つの基本的な境界によって特徴づけられます。 これらは、サーバーがクライアントからのリクエストを処理および受信する方法を定義します。 これらのインタラクションの枠組み内で動作するこのサービスは、生産性、規模、シンプルさ、豊富さ、可視性、モビリティ、信頼性などの非機能的な力の要素を排除します。 サービスが必要な接続を切断した場合、RESTful になることはできません。

最初の境界は、クライアント/サーバーのアーキテクチャ スタイルにもたらされます。 クライアント インターフェイスの問題とデータ保存の問題が軽減されることで、いくつかのプラットフォームでのクライアント インターフェイスの移植性が向上します。 また、サーバー コンポーネントを簡素化することでスケーラビリティも向上します。 おそらく Merezha にとって最も重要なのは、コンポーネントを独立して開発できるようにすることで、インターネット規模から大規模な組織ドメインまでを実現できることです。

安全性

REST は必要なセキュリティ サポートを提供しません。 これは REST Web サービスを設計するときに非常に重要です。セキュリティと設計を考慮する必要があります。 REST Web サービスは、CRUD 操作で HTTP PUT および DELETE を使用します。 PUT と DELETE は多くのブラウザではサポートされておらず、機密性が損なわれる可能性があるため、ピア サーバーに接続されることがほとんどです。 サーバーとクライアントの間に適切な設定がない場合、サードパーティのクライアントは PUT メソッドまたは DELETE リソースを使用してリソースを作成できます。 開発期間中、Web サービスの安全性を確保し、これらの瞬間を確実に保護することができました。

建築要素

REST の重要な側面は、そのデータ要素の性質と性質です。 REST スタイルには、情報の動作と生成を説明するいくつかの概念があります。

リソースは、インターネット上で利用可能なオブジェクト (論理的または物理的) です。 これは、サーバー ファイル システムに保存されているドキュメント、またはデータベース テーブルの行である可能性があります。 端末 koristuvach はリソースと対話してソング マークに到達します。 REST を使用してシステムを設計するには、設計者はビジネス オブジェクトをリソースとして、またアドレス指定できるものとして考える必要があります。

URI – リソースを一意に識別します。 このパラメータはアドレス リソースを変更し、変更される可能性があります。 リソースは、HTTP などのプロトコルをサポートするプログラムと交換されます。

Podannya - 現時点では私がリソースになります。 クライアントは、リクエストをリソースに返し、その後に URI が続きます。 リソースは、XML、HTML、JSON、RSS、REST API Java など、送信される 1 つ以上の形式で表示できます。 これらの形式は、コンテンツ拡張のための追加メカニズムを使用して対応できます。

資格 - プログラムがある状態から別の状態への移行をキャンセルできるようにします。 各リソースには他のリソースへの接続がある場合があります。 現在、今後の移行の制定が確認される可能性があります。 適切に接続されたプログラムにより、ユーザーは独自にインターフェイスを開くことができます。

コネクタ

接続は、コンポーネント間の接続を仲介する抽象インターフェイスです。 REST インタラクションのフラグメントは削除されず、コネクタはネットワークに関する情報を保存する責任を負いません。 したがって、コンポーネント間の接続を並行して作成できます。

クライアントとサーバーが主要な REST コネクタです。 クライアントがリクエストを開始し、サーバーがそれを処理します。

現金もロゼムの一種です。 キャッシュはクライアント、サーバー、その他のレベルで実装できます。 これにより、回復時間と限界付近が変化します。

コンポーネント

コンポーネントは、厳密に定義されたリソース方法を使用して組み立てられ、生産および搬送工場の保管条件が作成されます。

ユーザーエージェント – リクエストを開始するための vikoryst クライアント接続。

Origin-server – 電源用の Vikorist サーバー コネクタ。

プロキシは、他のサービスとのインターフェイスをカプセル化するためにクライアント側で使用される仲介者です。 データの変換と保護も含まれます。

ゲートウェイは、他のサービスによるインターフェイスのカプセル化を保証するためにサーバーにインストールされる仲介者です。

発展の見通し

新たに関連する食品: REST API - 現在のインターネット テクノロジにとって REST API は何ですか? REST は最新の Web アーキテクチャの基礎であり、いくつかの既存のスタイルを分析し、そこに新しい追加を導入することによって開発されます。

REST API の目標 - それは何ですか? 目的は、異なるスタイルを調整された一連の境界と組み合わせて、クロストークを最小限に抑え、コンポーネントの独立した進化を最大化してスケールを達成することです。 新しいハイパーメディア アーキテクチャの価格。 スマートフォン、タブレット、ガジェットの出現により、ある程度の規模が生まれました。

サードパーティのサービス用に RESTful API を作成できます。 バックエンドを備えた片面ロボット プログラムを使用できます。 インターフェイスを設計する前に知っておく必要がある重要なポイントがいくつかあります。

URLと条件

REST の重要な原則は、API を論理リソースに分割することです。 これらのリソースの管理は、追加の HTTP リクエストと標準メソッド (GET、POST、PUT、PATCH、DELETE) を使用して実行されます。

リソースは多重度の名前で記述する必要があります。 リソースに対するアクションは CRUD 戦略を使用して定義され、次の順序で HTTP メソッドによってサポートされます。

  • GET /api/users – クライアントのリストを取得します。
  • GET /api/users/123 - 指定されたユーザーを選択します。
  • POST /api/users – 新しいユーザーを作成します。
  • PUT /api/users/123 - 指定されたアカウント マネージャーのすべての詳細を更新します。
  • PATCH /api/users/123 – koristuvach のデータを部分的に更新します。
  • /api/users/123 を削除します - vidaliti koristuvach。

リソースは別のリソースのコンテキスト内にのみ存在するため、URL を組み合わせることができます。

  • GET /api/posts/9/comments - コメントのリストをエントリ 9 まで下にスクロールします。
  • GET /api/posts/9/comments/3 - コメント番号 3 を投稿番号 9 に移動します。

オブジェクトに対するアクションが CRUD 操作である場合、それをストレージ リソースとして使用できます。

  • POST /api/posts/9/like - 類似点としてレコード番号 9 を意味します。
  • DELETE /api/posts/9/like - 投稿番号 9 から「適格」アイコンを削除します。

リソースの作成と更新によりリソースを有効活用できる

POST、PUT、または PATCH メソッドでは、入力前に含まれていなかったリソース フィールド (ID、作成日、更新日など) を変更できます。 API でユーザーを圧倒しないようにするには、更新されたデータを削除する別のリクエストを行う必要があります。このようなメソッドを使用すると、リクエストが元に戻る可能性があります。

フィルター、並べ替え、検索

Wiki では任意の HTTP クエリ パラメーターを使用して、クエリを明確にしたり、データを並べ替えたりできます。

  • GET /api/users?state=active – アクティブなアカウント ユーザーのリスト。
  • GET /api/tasks?state=open&sort=priority,-created_at - 優先度と作成日で並べ替えられた未作成のタスクのリスト (新しいタスクから開始)。

ポスターナビゲーション

サイド ナビゲーションに関する情報をターゲットのリストに追加する必要がある場合は、データ ラッパーを追加するのではなく、HTTP リンク ヘッダーをすぐに使用できます。

ヘッダーバット:

リンク: ; rel="次"、 ; rel="前", ; rel="最初", ; rel="最後"

可能な相対値:

  • 次に、結果ページが表示されます。
  • prev – 結果の前面。
  • first – 結果の最初のページ。
  • last – 結果の最後の面。

場合によってはページの単純な検索ではなく、複雑なルールに基づいてサイド ナビゲーションを実行できるように、さまざまな URL を構築するのではなく、これらの意味を理解することが重要です。

HTTPメソッドへの再割り当て

GET と POST 以外の HTTP メソッドをサポートしていない一部のサーバーまたはクライアントで使用する場合、それらのエミュレーションが必要になる場合があります。 メソッドの値は X-HTTP-Method-Override ヘッダーに渡され、値自体は POST メソッドとしてラベル付けされます。 サーバーの状態を変更するのは GET リクエストのせいではありません。

KodiのHTTPステータス

  • 200 OK – 成功したリクエスト GET、PUT、PATCH、または DELETE への応答。
  • 201 Created - POST 応答は、新しいオブジェクトの作成結果を示します。 応答には、リソースの URL を示す Location ヘッダーが伴う場合もあります。
  • 204 No Content – 何も変更しないコマンド (DELETE など) が正常に完了したことを示します。
  • 404 Not Found - 要求されたオブジェクトが見つかりませんでした。
  • 500 Internal Server Error – サーバー上のエラー。

購入の場合、可能であれば、タイプに購入者向けの追加情報が含まれる場合があります。

俳優たちはこう言います:

「ツェー API、ウィキリストの HTTP リクエスト

取得、挿入、投稿і 消去 ".

誰が同じことを言ったとしても:

「リソース割り当てについては追加の URI を参照してください」

他の人は大声で叫びます。

最後に次のように言うことができます。

「原理的には簡単なんですが、 API、なんてヴィコリストなんだろう HTTP右!"

これらの人々の行為はミルコフの慈悲を裏付けました。

デヤキ・チャストコヴォ・ヴェルニ、

でもそれは意味がないので、

ボー臭い 誰もが要点を見逃している.

RESTful APIの開発を可能にするために、

最初のものによると、

レストとは何ですか?

レストとは何ですか?

REST は次のとおりです。

    HTTP ではなく Virazno

    血のプロトコル

    仕様なし

なぜこれほど多くの REST API があるのでしょうか?

それなのに...

REST はアーキテクチャのスタイルです。

ああ、すごい...この建築様式は何ですか?

建築様式

バザナの建築

建築に一連の境界を加えたものであり、それが建築へと構築され、究極の建築が生み出されます。

停滞し相互接続された構造は、ヴィコリスタンの地下滝に最適化された独自のアーキテクチャに基づいています。

RESTはデータ転送の略です

これはロイ フィールディングが 2000 年に博士論文の中で記録したもので、現在の Web アーキテクチャを抽象化したものとして説明しています。

このブラの名前は、Web サプリメントの適切な開発にどのように対処するかについての Wiklikati 声明に呼ばれています。

Roy は REST を簡単な例で説明しました。

Web ページを仮想マシンとして見てみましょう。

肌側は体を表します。

1. まず、koristuvach はインデックス キャンプの外観から最初のキャンプを削除します。

2. 次に、koristuvach はプログラムを実行し、メッセージを選択します (ここではメッセージが側に送信されます)。

3. コリストヴァチェヴィ陣営への攻撃移管の結果。

HTTP ではなく REST ドキュメント

もちろん、2000 年の時点で、ネットワークはすでに HTTP で動作しており、ロイと彼の同僚のエンジニアはそれに熱心に取り組んでいました。

ただし、REST では、特定のシステム実装の詳細やプロトコル構文は指定されていません。

HTTP 対応プロトコル上に RESTful アーキテクチャを構築することは完全に可能です。

たとえば、CoAP (Cooperative Access Protocol) は、デバイス (モノのインターネット) を展開するための RESTful プロトコルであり、デバイスと同時に最小限のリソースを割り当てるために使用されます。

では、REST を使用する意味は何でしょうか?

World Wide Web は REST アーキテクチャに基づいています。

したがって、インターネット上で一般的な非 RESTful API を作成すると、次善のシステムが作成されることになります。 最適化されたアーキテクチャには最適ではありません。

一部の非 RESTful API はエッジ アーキテクチャに最適ではない可能性があるだけでなく、他の問題にも最適ではないことに注意することが重要です。 たとえば、最新のフロントエンド プログラムは非常に特殊なニーズを満たすことができ、GraphQL や Falcor などのデータ収集ライブラリの数も増えています。

では、RESTful API はいくつあるのでしょうか?

API が REST 境界内で一貫して動作する場合、その API は RESTful です。

REST とは、望ましいシステム最適化を達成するための 6 つの境界を意味します。

1. クライアントサーバー

この交換は利益の原則に基づいています。

これにより、コンポーネントが独立して開発できるようになります。 API を作成すると、API は多数のクライアントにサービスを提供するサーバーとして機能します。

2.かさばらない

クライアントとサーバー間の接続はシームレスです。 これは、トランザクションを完了するために必要なすべての情報をサーバーに入力するのはクライアントの責任であることを意味します。

この交換の主な利点は、サーバーがリクエスト間のクライアントの時間を節約する必要がないため、システムをより迅速に拡張できることです。 クライアントのシステムに関する情報を記憶する必要があるため、サーバーのリソースが解放され、より多くのクライアントに同時にサービスを提供できるようになります。

最も効果的な対策は、その対策を活性化させない対策です。

API を作成する場合、キャッシュを無視するのは私たちの責任ではありません。

4. 正しいインターフェース

キャッシュを効率的にキャッシュするには、コンポーネントが単一のインターフェイスを介して通信できる必要があります。 単一のインターフェースで、必要な情報を標準的な形式で送信できます。

4.1. リソースの識別

これは、名前を付けることができるあらゆる情報をリソース (画像、ドキュメント、またはその他のリソースのセット) にすることができることを意味します。

4.2. マニフェストによるリソースの操作

リソースはさまざまな方法で表現できます。

たとえば、HTML、XML、JSON、または JPEG ファイルを送信します。

これは、クライアントがそのマニフェストを通じてリソースと対話することを意味し、対話におけるリソースの抽象的な理解が大幅に減少します。

4.3 第三に、自己記述情報

これは、リソースが報告されたリクエストに説明を提供でき、サーバーがサイトに関する説明を提供できることを意味します。 したがって、HTTP ヘッダーと応答コードがこのルールの主な実装になります。

4.4. ハイパーメディアはエンジンにもなり、プログラムにもなるかもしれない

これは実際には、クライアントがハイパーパワー化を通じてリソースにアクセスできるようにする機能がプログラムに備わっていることを意味します。

ご覧のとおり、HTTP プロトコルには多くのルールを実装できます。 したがって、Vikorist API が HTTP を正しく使用している場合、これは RESTful になる絶好の機会となります。

5. バガトリーシステム

リッチ ネットワーク システムでは、シングルモード ネットワーク インターフェイスを使用して、プロキシ サーバーなどの仲介者をクライアントとサーバーの間に配置できます。

リッチ システムの利点の 1 つは、仲介者が曲の目的やキャッシュなどのためにクライアントとサーバーのトラフィックを傍受できることです。

6. ビモガコード

この単純な交換により、クライアントはログを記録するためのプログラムをクライアント側にインストールできるようになります。 この最良の例は、JavaScript インターフェイス アドオンです。 これはすぐにわかるかもしれませんが、インターネットの初期には進化しつつある概念があり、これはインターネット アーキテクチャの中核部分でした。

では、REST API はどのように作成すればよいのでしょうか?

適切に vikoristuvat HTTP

RESTful API を使用する場合は、RESTful プロトコルを有効にしてください。 インターネットの場合、HTTP プロトコルが第一の選択肢です。 HTTP を適切に使用するための API を作成します。

単一のインターフェースを作成する

概念をリソースに合わせて、それぞれに一意の識別子を割り当てます。 最も簡単な方法は、外国人向けのデータベースサービスを利用することです。 このようなサービスの場合、2 つのリソースに名前を付けることができます。 Koristuvachiv と koristuvachiv (コレクション リソース)。 これらのリソースは、API の /users URI および /user/(id) URI によって識別できます。

API の強力な機能を紹介する

REST アーキテクチャを思い出してください

RESTful API の作成におけるそれほど困難ではない側面は、インターネットとその基礎となるアーキテクチャを理解することがいかに重要であるかということになります。 この最適化を高速化することも、無視することもできます。

食事でお困りのことがございましたら、

私の投稿を読んでいただきありがとうございます。
コメント欄では常に反発や意見が飛び交っています。

親愛なる読者の皆さん、こんにちは! この記事を読み始める前に、この創造の目的と、私がこの記事を書くきっかけとなった啓示について説明したいと思います。

当社のプロジェクトの 1 つである Vinyl では、REST スタイルでサーバー アプリケーションを設計する必要がありました。 当初から私たちは、最も強力な情報を抽出するために、単純なタスクをどうするかを考えていました。

アーキテクチャを開発し、REST サービスを統一スタイルにするプロセスを開始すると、同僚と私は、さまざまな側面の実装に関して矛盾する問題や異なる視点を持ち始めました。 ここで私たちは、Google を開いて集合的な精神を助け、RESTful プログラムを設計する際に避けるべきベスト プラクティスを学ぶ必要があることに気づきました。

この記事は、Web アドオン (および場合によっては REST サービス) の操作についてすでに明確に理解しているが、知識の統合や標準化を必要としない人にとって興味深いものです。

ヴィズナチェンニャ

まず、REST とは何かを理解する必要があります。 Wikipedia にはこの栄養学的回答が掲載されています。 休む (代表的な状態の転送- 「マニフェストへの転送」) は、境界内の分割された付属物のコンポーネント間の相互作用のアーキテクチャ スタイルです。 REST は、分散ハイパーメディア システムを設計する際に考慮すべき便利な接続のセットを提供します。

私は、REST の概念を「クライアント アプリケーションとサーバー アプリケーション間の対話を統合できるようにする一連の推奨事項」として説明しました。
この記事では、一般に受け入れられている慣行に従って REST サービスを設計および作成するのに役立つこれらの「推奨事項」について説明します。

また、これは REST サービスであることも理解してください。 私は REST サービスを「クライアント プログラムとサーバー間の対話ポイント」と定義しました。 Java 用語では、これはサーブレットであり、クライアントがリクエストを送信します。

問題

ルールの説明を始める前に、従う必要がある統一ルールはないため、REST は標準ではないという考えを伝えたいと思います。 これは、さまざまな状況を最もよく解決できる解決策について、まだ十分な理解が得られていないことを意味します。 それぞれの特定の状況でどの HTTP メソッドを使用するか、どの HTTP コードを使用するかを読むのは非常に一般的です。

サービス名

開始するには、REST サービスの名前を選択する必要があります。 サービス名の下では、リクエストの URI 内のパスが尊重されます。 例えば、 http://my-site.by/api/rest/service/name。 名前を選択するには、REST アーキテクチャにおける「リソース」が何であるかを理解する必要があります。

リソースへの敬意

REST 用語では、HTML ドキュメント、画像、特定のクライアントに関する情報などのリソースを指します。 リソースは実際のオブジェクトであるため、XML や JSON などの標準形式で簡単に確認できます。 その後、サーバーは選択された形式を使用してこのリソースを送信でき、クライアントはサーバーから選択されたリソースを操作できるようになります。

JSON 形式で「profile」リソースに送信される例:

    "id" :1 、

    "名前" :"マヘシュ" ,

    "ログイン":"マネシュ"

REST では、リソースの表現に使用される形式に明示的な制限が課されておらず、リソースの表現に使用される形式を開発する際に従う必要のあるルールがいくつかあります。

  • クライアントとサーバーは、選択された形式を理解し、操作できるようにする責任があります。
  • リソースは、リソースの複雑さに関係なく、選択した任意の形式で完全に記述することができます。
  • この形式は、リソース間の接続を確立できる可能性を伝えることができます。

リソース「リクエスト」への送信とリソース「プロファイル」との接続の例:

    ID: 11254、

    通貨: "ユーロ" 、

    金額: 100

    プロフィール: (

    ID:11、

    ウリ: 「http://MyService/Profiles/11」

ご覧のとおり、別のリソースに割り当てられているリソースの構造全体を複製することは必須ではありません。 Natomist は、別のリソースに送信することを合理的に vikoristovat にすることができます。

Zvernennya からリソースへ

スキン リソースは、永続的な識別子によって一意に識別できます。 「永続的」とは、データ交換中は識別子が変化せず、変化するとリソースに割り当てられることを意味します。 リソースに別の識別子が割り当てられている場合、サーバーはクライアントに通知する必要があり、クライアントは新しいアドレスに送信する日付を示します。 リソースは URL によって一意に識別されます。 これは、URL がデータ項目の主キーであることを意味します。 たとえば、トット、警察のマティマが見た本からの別の本 /本/2 、そしてこの本の41面は、 /本/2/ページ/41 。 Zvіdsiy終了タスク形式。 また、アドレスの後ろにどのような形式のデータが含まれているかはまったく問題ではありません。 /本/2/ページ/41 – これは、HTML、jpeg ファイルのスキャンしたコピー、または Word 文書の場合があります。

REST サービスに名前を割り当てるときは、複数のリソース名を選択することをお勧めします。 このアプローチにより、既存のサービスの名前を拡張せずに、新しい REST サービスを追加できます。 たとえば、サービス /本 あなたのすべての本のリストを教えてください、 /本/3 3冊目の書籍とサービスの情報へ /本/3/ページ 3 冊目の本のすべての面を裏返します。

リソースに対して特定のアクションを作成するサービスの場合、アクションを入力するには 2 つの方法があります: サービス名に入力するか、サービスのパラメーターに入力します。 例えば、 /books/3/clean または /books/3?clean 。 私は最初のオプションを優先します。そのようなサービスでは、URL へのパラメータの受け渡しをサポートしていない POST メソッドが使用されることが多く、そのためサービスがあまり読みにくくなると私は考えています。 サービス名におけるアクションのタイプは重要であるため、HTTP メソッドのタイプを可能な限り考慮して、サービスをさらに拡張していきます。

また、左側にタグが含まれ、ウェアハウス サービスのビジネスを説明する名前を使用することも推奨されません (Java メソッドに名前を付けるときに機能することが推奨されるため)。 たとえば、ザミスト /getAllCars お金を稼ぐためのより良い方法 /車 。 この方法を一言で説明することはできないため、単一のスタイルの区切り文字を確立する必要があります。私はこれを「-」と呼びます。これが最も一般的なアプローチです。 例えば、 /車/3/販売可能。

REST サービス名の設計の詳細については、以下を参照してください。

HTTPメソッド

REST には、GET、POST、PUT、DELETE という 4 つの主要な HTTP メソッドがあります。 ほとんどの場合、メソッドのスキンは CRUD によるビジネスが終了するまで機能します ( c食べる、 r読んで、 あなた更新、 d elete – 「作成、読み取り、更新、表示」).
POST – 作成、GET – 読み取り、PUT – 更新、DELETE – 削除。

重要な追加: これらは REST パターンと呼ばれ、実装する必要がある HTTP メソッドに関連しています。 もっと身近なところでは、モデルによって POST と PUT が異なる方法で見られます。 ただし、作成、置換、または更新のための PUT 割り当ては、POST には割り当てられません。 したがって、POST コードと PUT コードは交換できます。 ほとんどの場合、作成には POST が使用され、編集には PUT が使用されます。その理由については後ほど説明します。

リソースと対話するさまざまな方法の例をいくつか紹介します。

  • /本/を入手- すべての書籍のリストを選択します。 許しを請う、それだけです。 識別子とオブジェクト名のフィールドのみを配置し、他のデータは配置しません。
  • GET /books/(id)- 書籍に関する詳細情報を削除します。
  • 投稿 /本/- 新しい本を作成中です。 データはノートで送信されます。
    PUT /books/(id)– 書籍に関するデータを識別子 (id) で変更し、場合によってはそれらを置き換えます。 要求に応じてデータも転送されます。
  • オプション/本- 割り当てられたリソースに対してサポートされている操作のリストを選択します (実際には可視化されていません)
  • /books/(id) を削除します– 識別子 (id) からデータを削除します。

セキュリティと冪等性

また、HTTP メソッドを選択して、これらのメソッドのセキュリティと冪等性を知るのにも役立ちます。

不用意なリクエストとは、プログラムのステータスを変更しないリクエストではありません。

冪等リクエストはリクエストではなく、複数応答の導出であるその効果は、使い捨ての導出の効果よりも古いものです。

この表から判断すると、GET リクエストは停滞しているリソースの状態を変更しません。 PUT ステートメントと DELETE ステートメントはリソースのステータスを変更する可能性がありますが、前のステートメントが終了する理由がないため、落ち着いて繰り返すことができます。 原則として、これは論理的です。特定のリソースを繰り返して特定のリソースに置き換えると、その結果、リソースがさらに置き換えられます。 表に見られるように、Ale POST は安全ではなく、無保証に書かれています。 リソースが変化するだけでなく、繰り返される影響も非常に多様です。 これは、代わりに、新しい DB 要素を追加する操作によって表されます。ウィンドウには X 回書き込まれ、DB は X 要素を受け取りました。

また、GET リクエストがリソースのステータスを変更しない理由についても説明します。 GET リクエストは、プロキシ サーバーなどにキャッシュできます。 この場合、リクエストはプログラムによってサーバーに到達するのではなく、プロキシ サーバーがキャッシュから情報を返すためである可能性があります。

HTTP コード

HTTP 標準では、70 を超えるステータス コードが説明されています。 調子が良ければメインで欲しいです。

  • 200 – OK – リクエストは成功しました。 クライアントがデータを要求した場合、それはヘッダーおよび/または情報に表示されます。
  • 201 – OK – クエストが成功した結果、新しいリソースが作成されました。
  • 204 – OK – リソースは正常に取得されました。
  • 304 – 未変更 – クライアントはキャッシュのデータにアクセスできます。
  • 400 – 不正なリクエスト – リクエストが無効であるか、リクエストを処理できません。
  • 401 – Unauthorized – リクエストは顧客の認証を示します。
  • 403 – 禁止 – サーバーは許可を要求しましたが、その処理は許可されず、アクセスはブロックされます。
  • 404 – 見つかりません – リソースが見つかりません。
  • 500 – 内部サーバー エラー – API 開発者は、このようなバグを回避する責任があります。

これらの特典は、グローバル キャッチ ブロックでキャッチされるか、誓約されるか、その他の方法でブランチから返還される可能性があります。

活性化するコードのセットが大きくなればなるほど、作成する API はよりインテリジェントになります。 ただし、ブラウザーによってこれらのコードの処理方法が異なることに注意してください。 たとえば、307 応答コードを拒否する一部のブラウザではすぐにリダイレクトが表示されますが、一部のブラウザではこの状況を処理してアクションを保存できます。 まず第一に、クライアント側でそれがどのように機能するかを理解することが重要です。

ヘッダー

  • コンテンツタイプ- 質問形式;
  • 受け入れる- 放送形式のリスト。

リソースを検索するためのパラメータ

情報の処理を担当するサービスの選択を簡素化し、サービスの生産性を高めるには、並べ替え、フィルタリング、フィールドの選択、およびページネーションのためのパラメータの入力方法を理解する必要があります。

濾過

フィルタリング用のスキン フィールドの一意のパラメータを作成します。 これにより、出力される情報の量を制限でき、リクエストの処理時間を最適化できます。

たとえば、すべてのレッドブックを表示するには、次のように記述する必要があります。

GET /books?color=red

ソルトゥヴァーニャ

選別は濾過と同様の方法で実装されます。 たとえば、すべての書籍を日付ごとに出版物ごとに、成長ごとにタイトルごとに並べて表示するには、次のエントリを入力する必要があります。

GET /books?sort=-年,+名前

ページネーション

プログラムの同じページに表示されるリソースのリストにアクセスできるようにするために、REST API はページネーション機能を使用します。 これは、既知の SQL パラメーター、limit および offset を使用して実装されます。 例えば:

GET /books?offset=10&limit=5

さらに、リンクヘッダーの前、後ろ、最初、残りのページにメッセージを表示することは良い形式です。 例えば:

リンク: ; rel="次"、
; rel="最後"、
; rel="最初",
; rel="前へ"

リソースのフィールドを選択してください

手動サービスの場合、トラフィックを節約するために、データ表示形式をカスタマイズする機能を追加できます。 リソースのフィールドを選択して、REST サービスを更新することができます。 たとえば、書籍 ID とその色の両方を削除する必要がある場合は、次のエントリを入力する必要があります。

GET /books?fields=id,color

私があなたを救います

RESTful サービスを交換する理由の 1 つは、リクエストを削除するためにクライアントの時間を節約する必要があることです。

お金の節約にならないサービスの例:
リクエスト1:
リクエスト2: GET http://MyService/persons/2 HTTP/1.1

これらの飲み物による肌は、他の飲み物に関係なく、肌トラブルを引き起こす可能性があります。

費用を節約できるサービスの例:
リクエスト1: GET http://MyService/persons/1 HTTP/1.1
リクエスト2: http://MyService/Nextperson HTTP/1.1 を取得します。

別のリクエストを処理するには、サーバーはクライアントがリクエストした残りの人の ID を「記憶」する必要があります。 トブト。 サーバーはその生産ラインを「記憶」する責任を負います。そうしないと、別の供給によって問題が発生する可能性があります。 サービスを設計する際、エネルギーを節約する必要はなく、優先順位は低くなります。

コストを節約しないサービスの利点:

  • サービスはそれぞれ独立して飲み物を要求します。
  • サービスのアーキテクチャに別れを告げるでしょう。
  • HTTP プロトコルを使用してサービスを実装するために追加の作業は必要ありません。HTTP プロトコルではデータも保存されません。

十分なサービスがなければ費用の節約につながりません:

  • クライアント自身が、コンテキストに必要なサービスをサービスに転送する責任があります。

バージョン

REST API バージョンをサポートすることをお勧めします。 これにより、すでに API を使用しているクライアントに変更を強いることなく、API を簡単に拡張できます。
バージョン管理を実装するためのさまざまなアプローチ:

  • さらに支援が必要な場合は、ヘッダーを受け入れてください。 この場合、API バージョンは Accept で指定されます。 受け入れる:テキスト/v2+json
  • Z vikoristannyam URI。 このアプローチでは、API バージョンは URI で直接指定されます - http://localhost/api/v2/books
  • カスタムヘッダーWiki。 API バージョンを渡す役割も担うパワーヘッダーを使用できます。 - API バージョン:v2
  • Vikoristannya パラメータが尋ねられます。 API バージョン転送パラメータを変更できます - /books?v=2

提示された各方法には睡眠の権利があり、それぞれに独自の長所と短所があります。 ただし、バージョン管理を実装するどの方法がプロジェクトに適しているかを決定するのはあなた次第です。

ドキュメンテーション

REST サービスを手動で構成するには、優れた包括的なドキュメントを作成する必要があります。 これには、Mashape や Apiary などのさまざまなツールを使用できますが、Swagger を使用することをお勧めします。

Swagger は、REST サービスを文書化できるテクノロジーです。 Swagger は、顔の見えないプログラミングとフレームワークを奨励します。 さらに、Swagger はドキュメントを確認するための UI を提供します。

Swagger に関するレポート情報を価格で表示できます。

アーカイブ

ケシュヴァンニャ

また、データベースへのリクエストを高速化し、REST サービスのデータ速度を向上させるために、キャッシュ メカニズムを設定することをお勧めします。 キャッシュはサーバー レベルで調整でき、さらに状況に応じて調整できます。

Keshuvannyam は次の HTTP ヘッダーを使用できます。

  • 日付 - リソースの作成日時。
  • 最終変更日 – サーバー上のリソースが最後に変更された日付と時刻。
  • Cache-Control は、キャッシュを制御するために使用される HTTP 1.1 ヘッダーです。
  • 経過時間 - リソースが残りキャプチャされてから 1 時間後、中間 (クライアントとサーバーの間) コンポーネント (プロキシ サーバーなど) によってヘッダーを追加できます。

© 2024 androidas.ru - Android のすべて