スキーマのカスタマイズ
Version 25.3.9411
Version 25.3.9411
スキーマのカスタマイズ
API Server API ページでAPI を定義すると、テーブルとストアドプロシージャはテキストベースのスキーマに保持されます。スキーマは、テーブルカラムやストアドプロシージャの操作を定義できるXML ベースのスクリプト設定言語であるAPIScript で記述されます。これには、データベース、ファイル、およびバックエンドサービスの読み書きを実現する組み込みオペレーションが含まれています。
APIScript は、これらのデータ処理機能に加えて、条件分岐やループなどに対応して構成されているフル機能の言語です。ただし、スキーマの例に示されているように、大抵のテーブル定義にはこれらの機能を使う必要はありません。
次のセクションは、SQLite データベース内のテーブルへの双方向アクセスを可能にするフル機能のスキーマについて説明します。API ページのタブを使用して、データベーステーブルおよびストアドプロシージャの類似したスキーマを生成することができます。既存のスキーマを編集するには、そのリンクをクリックし、必要な変更を加えて、変更を保存をクリックします。ただし、多くの変更を加える場合は、スキーマファイルを直接編集する必要があります。テーブルのスキーマは.rsd ファイルに書き込まれ、ストアドプロシージャのスキーマは.rsb ファイルに書き込まれます。これらのファイルは、アプリケーションルートのapi サブフォルダにあります。カスタムスキーマを同じフォルダに配置します。
これらのセクションでは、他のデータソースに読み書きを行う独自のスキーマを記述するために必要なすべてのコンポーネントについても詳しく説明します。
テーブルカラムのマークアップ
API Server がデータベースに接続すると、テーブルのカラムには次の基本属性が設定されます:
- カラム名
- 主キーインジケータ
- データ型
api:info スキーマブロック内では、テーブルカラムを以下のアトリビュート(およびその他)でマークアップできます。
<api:info title="NorthwindOData" desc="Access the Cars database through REST APIs." connection="SQLiteCars">
<attr name="ID" key="true" xs:type="int" />
<attr name="Make" xs:type="string" />
<attr name="Model" xs:type="string" />
<attr name="Cost" xs:type="double" />
<attr name="CreatedDate" xs:type="datetime" />
<attr name="InStock" xs:type="boolean" />
</api:info>
データの取得
HTTP GET リクエストを受信すると、API Server はスキーマのGET メソッドを実行します。このメソッドでは、API Server の組み込みオペレーションを呼び出して、データ取得リクエストを処理することができます。HTTP GET を使った検索リクエストの例を示します:
GET api.rsc/Cars?$filter=Make eq 'Honda'
このリクエストは、次のSQL クエリに対応します:
SELECT * FROM Cars WHERE Make = 'Honda'
対応するGET メソッドでは、データベースクエリの結果はAPI Server のHTTP レスポンスにapi:push キーワードによって追加されます。データベースに対する検索、ソート、サマリ、およびその他のデータ取得クエリの実行には、apiSelect オペレーションを使用できます。
<api:script method="GET" >
<api:push op="apiSelect"/>
</api:script>
データの送信
POST リクエストを受信すると、API Server はスキーマのPOST メソッドを実行し、挿入などのデータ操作オペレーションを呼び出すことができます。
例えば、このHTTP POST リクエストを見てみましょう:
POST api.rsc/Cars
{
"Model": "Civic",
"Make": "Honda"
}
このリクエストは、次のSQL クエリに対応します:
INSERT INTO (Model, Make) VALUES ('Civic', 'Honda')
対応するPOST メソッドでは、apiInsert オペレーションを使ってデータベースに挿入を実行できます。
<api:script method="POST">
<api:push op="apiInsert"/>
</api:script>
一部のデータベースは、新しいレコードの生成されたId などINSERT 構文からデータを返します。挿入から返された値にアクセスするには、GET と同様にapi:push キーワードを使用します。
データの更新
PUT リクエストを受信すると、API Server はスキーマのPUT メソッドを実行し、更新などのデータ操作オペレーションを呼び出すことができます。
例えば、このPUT リクエストを見てみましょう:
PUT http://localhost:8065/api.rsc/Cars('1000')
{
"Model": "Civic"
}
このリクエストは、次のSQL 文に対応します:
UPDATE Cars SET Model = 'Civic' WHERE Id = '1000'
対応するPUT メソッドでは、オペレーションが呼び出される前に必須入力である主キーが検証されます。api:validate キーワードを使ってインプットが指定されたことを確認(指定されていない場合はユーザーに警告)できます。
Note:スクリプトで処理される複数のHTTP メソッドを指定できます。
更新には通常戻り値がないため、api:call キーワードはオペレーションを呼び出すために使われます。apiUpdate オペレーションを呼び出して、データベースへの挿入を実行できます。
<api:script method="PUT,MERGE,PATCH">
<api:validate attr="Id" desc="更新にはId が必須です。" />
<api:call op="apiUpdate"/>
</api:script>
データの削除
DELETE リクエストを受信すると、API Server はスキーマのDELETE メソッドを実行し、削除オペレーションを呼び出すことができます。例えば、このHTTP DELETE リクエストを見てみましょう:
DELETE api.rsc/Cars('1000')
このリクエストは、下のSQL クエリに対応します:
DELETE FROM Cars WHERE Id = '1000'
DELETE メソッドでは、apiDelete オペレーションを呼び出してデータベースに削除を実行できます。
<api:script method="DELETE">
<api:validate attr="Id" desc="削除にはId が必須です。" />
<api:call op="apiDelete"/>
</api:script>
スキーマの例
次のスキーマは、SQLite データベースのCars テーブルへの読み書きアクセスを可能にします。これには、HTTP 経由でデータベースにアクセスするために必要なすべてのコンポーネントが含まれています。
<api:script xmlns:api="http://www.rssbus.com/ns/rsbscript/2">
<!-- Define columns and the database connection in the api:info block -->
<api:info title="case" description="Create, Update, Query, and Delete Cars." connection="SQLiteCars">
<attr name="Id" key="true" xs:type="string" />
<attr name="Year" xs:type="int" />
<attr name="Make" xs:type="string" />
<attr name="Model" xs:type="string" />
<attr name="DatePurchased" xs:type="datetime" />
</api:info>
<!-- The GET method is executed when an HTTP GET is received. You can configure data retrieval operations here. The results of processing are pushed to the schema's output. -->
<api:script method="GET">
<api:push op="apiSelect"/>
</api:script>
<!-- The POST method is executed when an HTTP POST is received. You can configure insert operations here. Use api:push to return the Id of the new record. -->
<api:script method="POST">
<api:validate attr="Make" desc="Make and Model are required to insert a Car."/>
<api:validate attr="Model" desc="Make and Model are required to insert a Car."/>
<api:push op="apiInsert"/>
</api:script>
<!-- The PUT method is executed when an HTTP PUT is received. You can configure update operations here. Within the script block, the primary key is used to update the record. Updates typically do not return data, so api:call is used to invoke the operation. -->
<api:script method="PUT,MERGE,PATCH">
<api:validate attr="Id" desc="更新にはId が必須です。"/>
<api:call op="apiUpdate"/>
</api:script>
<!-- The DELETE method is executed when an HTTP DELETE is received. You can configure delete operations here. Within the script block, the primary key is used to delete the record. -->
<api:script method="DELETE">
<api:validate attr="Id" desc="更新にはId が必須です。"/>
<api:call op="apiDelete"/>
</api:script>
</api:script>
キーワードリファレンス
このトピックで使われているキーワードに関する詳しい情報は、APIScript を参照してください: