ExtJSバックエンドのクイックスタート


問題を理解する


状況を想像してみてください:あなたはフリーランサーであり、Extで働いています。 1人(または複数人)のバックエンド開発者がリモートで作業します。 作業は高速でスムーズです。 しかし、サーバー側の開発者が変わったのは偶然です。 新しい同僚がExtの経験がある場合は、すべて順調です。 しかし、ある人が最初にExtのバックエンドを書いたり、初めてWebのことを書いた場合(これも起こります)、共通言語を見つける必要があります。
そして、ここで問題が始まるかもしれません...
プロトコルの簡単な説明に時間を費やす必要があり、サーバーが特定のリクエストにどのように応答するかを説明します。 これを避けるために、私はすべて(まあ、またはExtの標準プロトコルのほとんどすべてのニュアンス)を説明するドキュメントを準備しました。 このドキュメントは、カットの下に表示されます。

理解の問題の解決策



ExtJsはREST相互運用性アーキテクチャを最大限に活用します。 それは何であり、彼らが食べるものはすでにハブに書いています:
REST対SOAP。 パート1.違いを感じる
Webサービスのタオ。 (または、自転車の発明をやめてください!)
最初のトピック( Artiom1988 )の著者-テーブルに多くの人間のおかげで、開発者とのコミュニケーションに多大な時間を節約できました。 そして、私は(小さな変更を加えて)文書を盗みました

標準のHTTP操作

URLゲット投稿置く削除
example.com/ticketすべてのチケットのリストを取得する新しいチケットを作成するチケットのリストを更新するすべてのチケットを削除します
example.com/ticket/15(15はチケットIDです)特定のチケットに関する情報を取得する-チケットを変更します特定のチケットを削除する

URLに最後のスラッシュ(www.exam.com/ticket/)が含まれている場合、およびスラッシュが欠落している場合(www.exam.com/ticket)にリクエストが機能するはずです。

オブジェクト(チケット、ユーザーなど)には、idフィールド(整数値の形式の一意の識別子)があります。

メッセージフォーマット

すべてのメッセージは有効なJSONで送信されます。
次に、次の形式の配列構成を呼び出します。
[1,2,3,4,"",true, false, "34"] 

建設の目的は
 {"param1" : "value1", "param2" : true, "param3": 45} 

パラメータ名は常に文字列(二重引用符)であり、パラメータ値は文字列、数値、ブール値(trueおよびfalse)であることに注意してください
フィールドはパラメーター名と呼ばれ、上記のオブジェクトにはフィールドparam1とparam2があります

オブジェクトには、配列、および配列オブジェクトを含めることができます。たとえば、
 { "success": true, "items" : [ { "name": "Vasya" }, { "name" : "Sveta" }] } 


クライアントリクエストフォーマット

POSTおよびPUT

オブジェクトである1つのアイテムパラメーターが含まれています
 {"name":"123","id":0,"region_id":2,"region_name":""} 


ゲット

リストをリクエストするとき、標準パラメータを含めることができます:
start-応答が始まるレコード番号
limit-返されるレコードの最大数
filter-フォームのオブジェクトを含む配列
 {"property":"name","value":""} 

つまり GETリクエスト
/users?start=40&limit=20&filter=[{"property":"name","value":""}]
(リクエストは当然uriエンコードされます)データベースから最初の40人をスキップして、Vasyaという名前の20人のユーザーを返す必要があります。
検索フィールド+文字列 "_like"のような名前のフルネームフィルタリングでフィルターを使用することをお勧めします。 つまり フィルター
 {"property":"name_like","value":""} 
VasilievとVasilisの両方が見つかります。 全文検索のパラメータは、当然指定する価値があります。

サーバー応答フォーマット

答えは常にオブジェクトです。
ブール値を取ることができる成功フィールドが必要です。

GETリクエストへの応答

アイテムのリストが要求される場合、応答には合計フィールドが必要です。これは、このコントローラーのデータベース内の行の合計数を示す整数です(つまり、 フィルター制限パラメーターを指定し、いくつかのレコードを取得した場合、とにかく合計エントリの数を示します)。
特定のアイテムがリクエストされた場合( exmple.org/users/5 exmple.org/users/5 )、 合計フィールドは設定されていません。

データ自体は、 項目オブジェクトにあります。これは、データオブジェクトを含む配列です。
 { "items":[{ "region_id":2, "name":"Moscow", "id":25 },{ "region_id":1, "name":"Piter", "id":18 }], "success":true, "total":2 } 


1つのオブジェクトが要求された場合、配列は使用されません
 { "items":{ "region_id":2, "name":"Moscow", "id":25 },{ "region_id":1, "name":"Piter", "id":18 }, "success":true } 


DELETEクエリへの応答

 {"success":true} 
-それで十分です

POSTおよびPUT要求への応答

GETリクエストへの応答と同様に、特定のオブジェクトをリクエストする場合、既に変更されたデータのみを返す必要があります。

間違い

エラーの場合、 成功フィールドはfalseで、エラーフィールドも追加されます-エラーの説明を含む行の配列
 {"errors":["Object not found"],"success":false} 


データの命名

オブジェクトが別のオブジェクトを参照する必要がある場合、 _idプレフィックスを持つパラメーターが使用されます 。 サーバーがオブジェクト都市を返し、都市が地域にある場合、答えは次の形式になります。
 {"region_id":2,"name":"Moscow","id":25} 

必要に応じて、地域の名前を含むregion_nameフィールドを追加できます(また、cityテーブルにキャッシュされるフィールドとしてデータベースで機能します)。

1つのオブジェクトに多くが含まれ、ネストされた階層を取得する必要がある場合、複数形の名前を持つ配列フィールドが使用されます。 複数の都市が接続されている地域をリクエストする場合、答えは次のようになります。
 { "id":2, "name":"Central", "cities" : [{ "name": "Moscow", "id":2 },{ "name":"New York", "id":3 }] } 


バックエンドのテスト方法

テストにはすばらしいGoogle Chrome拡張機能を使用できます。
  1. GETリクエストの送信(サーバー上のデータベースには少なくとも1つのアイテムが必要です)
  2. すべてまたは必要なデータを含むPOST要求を送信します。 応答には、新しいトピックに関する情報が含まれている必要があります。
  3. GETリクエストを送信し、段落2で作成されたアイテムの存在を確認する
  4. 条項2で作成され、条項3のリストに含まれるアイテムを変更するためのPUT要求を送信する。応答には、変更されたアイテムに関する情報が含まれている
  5. GETリクエストを送信し、パラグラフ4で作成されたアイテムへの変更を確認する
  6. DELETE要求を送信して、ステップ2で作成されたアイテムを削除します。確認メッセージが返されます。
  7. GETリクエストを送信し、パラグラフ2で作成されたアイテムが存在しないことを確認する


おわりに


おそらく、このドキュメントはだれにとっても役に立たず、私のような誰かが少し貴重な時間を節約するでしょう。

Source: https://habr.com/ru/post/J136751/


All Articles