RESTForms-InterSystemsCachéクラスのREST API

この記事では、 RESTFormsプロジェクトを紹介します。これは、最新のWebアプリケーション向けのInterSystemsCaché2016.1+の汎用REST APIバックエンドです。 プロジェクトのアイデアはシンプルです-いくつかのREST APIを作成した後、原則として、REST APIは2つの部分で構成されることが明らかになりました。



また、独自のビジネスロジックを記述する必要がありますが、RESTFormsは、保存されたデータをそのまま使用するために必要なすべてを提供します。


ユースケース:



お客様


このプロジェクトはJS Webアプリケーションのバックエンドとして設計されているため、JSはすぐにRESTFormsの使用を開始でき、データ形式などを変換する必要はありません。


特徴


RESTFormsでできること:



方法


以下は、RESTFormsで何ができるかを示す利用可能なAPIメソッドの表です。


URL説明
テストする試験方法
フォーム/情報クラス一覧
フォーム/情報/すべてすべてのクラスのメタ情報
フォーム/情報/:クラス1つのクラスのメタ情報
フォーム/フィールド/:クラスクラスにプロパティを追加
フォーム/フィールド/:クラスプロパティを変更
フォーム/フィールド/:クラス/:プロパティプロパティを削除
フォーム/オブジェクト/:クラス/:idオブジェクトを取得
フォーム/オブジェクト/:クラス/:id /:プロパティオブジェクトのプロパティを取得
フォーム/オブジェクト/:クラスオブジェクトを作成
フォーム/オブジェクト/:クラス/:id動的オブジェクトからオブジェクトを更新する
フォーム/オブジェクト/:クラスクラスオブジェクトからオブジェクトを更新
フォーム/オブジェクト/:クラス/:idアイテムを削除
フォーム/オブジェクト/:クラス/:クエリSQLクエリを実行する
フォーム/オブジェクト/:クラス/カスタム/:クエリカスタムSQLクエリを実行する

設置


  1. リリースページ 20161.xml(Caché2016.1の場合)または201162.xml(Caché2016.2 +の場合)の最新リリースから任意のエリアにダウンロードしてインポートします。
  2. クラスブローカーForm.REST.Mainを使用して新しいWebアプリケーション/formsを作成します
  3. Open http:// localhost:57772 / forms / test?ブラウザでデバッグして、インストールを確認します( {"Status": "OK"}が表示されるはず{"Status": "OK"} 。パスワードが要求される場合があります)。
  4. テストデータを生成する場合は、以下を呼び出します。
     do ##class(Form.Util.Init).populateTestForms() 

RESTFormsの使用を開始するには?


  1. GitHubからプロジェクトをインポートします(推奨:サブモジュールとして独自のリポジトリに追加するか、リリースをダウンロードします)。
  2. RESTFormsで表現したいクラスごとに:
    • アダプタークラス(Form.Adaptor)から継承
    • オブジェクトの「名前」として使用されるプロパティを定義します
    • 表示するプロパティを定義する
  3. RESTForms APIを使用して、保存されたクラスを操作します。 例として、保存されたクラスのUI - RESTForms UIをすぐに取得できます。 以下は、RESTForms UIがPersonテストクラスを表示する方法の例です

クラスオブジェクトのリスト:


クラスオブジェクトのリスト


そしてクラスオブジェクト:


クラスオブジェクト


使用例


まず、どのクラスが利用可能かを知りたいです。 この情報を取得するには、以下を呼び出します。


 http://localhost:57772/forms/form/info 

次のような応答が返されます。


 [ { "name":"Company", "class":"Form.Test.Company" }, { "name":"Person", "class":"Form.Test.Person" }, { "name":"Simple form", "class":"Form.Test.Simple" } ] 

現在、RESTFormsには3つのテストクラスが付属しています。 Personフォーム(クラスForm.Test.Person)のメタデータを見てみましょう。 このデータを取得するには、以下を呼び出す必要があります。


 http://localhost:57772/forms/form/info/Form.Test.Person 

応答として、クラスメタデータを受け取ります。
 { "name":"Person", "class":"Form.Test.Person", "displayProperty":"name", "objpermissions":"CRUD", "fields":[ { "name":"name", "type":"%Library.String", "collection":"", "displayName":"Name", "required":0, "category":"datatype" }, { "name":"dob", "type":"%Library.Date", "collection":"", "displayName":"Date of Birth", "required":0, "category":"datatype" }, { "name":"ts", "type":"%Library.TimeStamp", "collection":"", "displayName":"Timestamp", "required":0, "category":"datatype" }, { "name":"num", "type":"%Library.Numeric", "collection":"", "displayName":"Number", "required":0, "category":"datatype" }, { "name":"ge", "type":"%Library.Integer", "collection":"", "displayName":"Age", "required":0, "category":"datatype" }, { "name":"relative", "type":"Form.Test.Person", "collection":"", "displayName":"Relative", "required":0, "category":"form" }, { "name":"Home", "type":"Form.Test.Address", "collection":"", "displayName":"House", "required":0, "category":"serial" }, { "name":"company", "type":"Form.Test.Company", "collection":"", "displayName":"Company", "required":0, "category":"form" } ] } 

これはどういう意味ですか?


クラスのメタデータ:



プロパティメタデータ:



クラス定義は次のとおりです。
 /// Test form: Person Class Form.Test.Person Extends (%Persistent, Form.Adaptor) { ///    Parameter FORMNAME = "Person"; ///  ///       (C),  (R),  (U),   (D) Parameter OBJPERMISSIONS As %String = "CRUD"; ///  ""  Parameter DISPLAYPROPERTY As %String = "name"; ///   - Parameter FORMORDERBY As %String = "dob"; ///  Property name As %String(DISPLAYNAME = "Name"); ///   Property dob As %Date(DISPLAYNAME = "Date of Birth"); ///  Property num As %Numeric(DISPLAYNAME = "Number") [ InitialExpression = "2.15" ]; /// ,   Property ge As %Integer(DISPLAYNAME = "Age") [ Calculated, SqlComputeCode = { set {*}=##class(Form.Test.Person).currentAge({dob})}, SqlComputed, SqlComputeOnChange = dob ]; ///   ClassMethod currentAge(date As %Date = "") As %Integer [ CodeMode = expression ] { $Select(date="":"",1:($ZD($H,8)-$ZD(date,8)\10000)) } ///  -      Form.Test.Person Property relative As Form.Test.Person(DISPLAYNAME = "Relative"); ///  Property Home As Form.Test.Address(DISPLAYNAME = "House"); ///   ,     /// http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_relationships Relationship company As Form.Test.Company(DISPLAYNAME = "Company") [ Cardinality = one, Inverse = employees ]; } 

クラスをRESTFormsに追加する


保存されたクラスをRESTFormsで使用できるようにするには、以下を行う必要があります。


  1. Form.Adaptorから継承を追加する
  2. FORMNAMEパラメーターに値を追加-クラス名
  3. パラメーターOBJPERMISSIONS追加-クラスオブジェクト(CRUD)でできること
  4. パラメーターDISPLAYPROPERTY追加-オブジェクトの名前を表示するために使用されるプロパティの名前
  5. パラメータFORMORDERBYを追加FORMORDERBYを使用したクエリによるソートのデフォルトプロパティ
  6. メタデータで表示する各プロパティについて、DISPLAYNAMEプロパティパラメータを追加する必要があります

テストデータを生成した後(インストール、ステップ4を参照)、識別子1のPersonを取得しましょう。オブジェクトを取得するには、以下を呼び出します。


 http://localhost:57772/forms/form/object/Form.Test.Person/1 

そして答えを得る:


 { "_class":"Form.Test.Person", "_id":1, "name":"Klingman,Rhonda H.", "dob":"1996-10-18", "ts":"2016-09-20T10:51:31.375Z", "num":2.15, "ge":20, "relative":null, "Home":{ "_class":"Form.Test.Address", "House":430, "Street":"5337 Second Place", "City":"Jackson" }, "company":{ "_class":"Form.Test.Company", "_id":60, "name":"XenaSys.com", "employees":[ null ] } } 

オブジェクト(特に、numプロパティ)を変更するには、次を呼び出します。


 PUT http://localhost:57772/forms/form/object/Form.Test.Person 

ボディ付き:


 { "_class":"Form.Test.Person", "_id":1, "num":3.15 } 

速度を向上させるには、 _class_id 、および変更されたプロパティのみをリクエスト本文に含めるようにしてください。


それでは、新しいオブジェクトを作成しましょう。 私たちは電話します:


 POST http://localhost:57772/forms/form/object/Form.Test.Person 

ボディ付き:


 { "_class":"Form.Test.Person", "name":"Test person", "dob":"2000-01-18", "ts":"2016-09-20T10:51:31.375Z", "num":2.15, "company":{ "_class":"Form.Test.Company", "_id":1 } } 

オブジェクトの作成が正常に完了すると、RESTFormsは識別子を返します。


 {"Id": "101"} 

それ以外の場合、JSON形式のエラーが返されます。 _classおよび_id介して永続プロパティを参照する必要があることに注意してください。


デモ


ここで RESTFormsをオンライン試すことができます (ユーザー:デモ、パスワード:デモ)。 さらに、RESTFormsUIアプリケーション(RESTFormsデータのエディター)があります。 デモスタンドはこちらから入手できます (ユーザー:デモ、パスワード:デモ)。 クラスリストのスクリーンショット:


クラスリスト


おわりに


RESTFormsは、保存されたクラスに関してREST APIに必要なほぼすべての作業を行います。


次は?


この記事では、RESTFormsの機能について話し始めました。 以下では、いくつかの追加機能、つまり、クライアントがSQLインジェクションのリスクなしにデータセットを安全に受信できるようにするクエリについてお話したいと思います。


参照資料




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


All Articles