IDU リクエスト¶
RESTful Web サービスは、ビューのデータのさまざまな表現を提供するほか、IDU (Insert、Delete、および Update) 操作を実行できます。
ビューに対して IDU 操作を実行するには、ビューが「更新可能」であることが必要です。どのような場合にビューが「更新可能」であるかについては「 ビューに対する挿入、更新および削除 」を参照してください。
RESTful 規則に従い、RESTful Web サービスによって Virtual DataPort に送信されるステートメントは、リクエストの HTTP メソッドに依存します (「 RESTful Web サービス: HTTP メソッドおよびそれと等価な VQL ステートメント 」を参照)。
POST
(INSERT
) リクエストと PUT
(UPDATE
) リクエストでは、ビューに挿入するデータをその本文に記述する必要があります。このデータは JSON ドキュメントまたは XML ドキュメントとして表現できます。そのドキュメントのタイプに応じて、HTTP ヘッダー Content-Type
は application/json
または application/xml
のどちらかとする必要があります。
リクエストの本文で送信する XML ドキュメントは、以下の条件に適合している必要があります。
ルートエレメントの名前にはビューの名前を使用します。
フィールドの値を
NULL
に設定する場合は、名前空間xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
を定義して、目的のフィールドに属性xsi:nil=true
を追加する必要があります (「 RESTful Web service: POST request with XML body 」を参照)。
どちらのタイプのドキュメントでも、 date
型の値は、 yyyy-MM-dd'T'hh:mm:ssZ
形式で記述する必要があります。たとえば、 2005-06-29T17:19:41+0000
と指定します。
ビューに PUT
(UPDATE
) リクエストまたは DELETE
リクエストを実行するには、そのビューにプライマリキーが定義されている必要があります。更新する行と削除する行は、そのプライマリキーの値で特定されるからです。
INSERT クエリ (POST)¶
ビューに INSERT
クエリを実行するには、そのビューを表す URL に POST
リクエストを送信する必要があります。
INSERT
クエリを実行する URL の構文は、 http://localhost:9090/denodo-restfulws/<database name>/views/<view name>
です。
たとえば、 http://localhost:9090/denodo-restfulws/admin/views/internet_inc
と指定します。
RESTful Web サービスでリクエストが正しく処理されると、HTTP コード 201 (Created) が返されます。ターゲットビューにプライマリキーが定義されていれば、新しい行を参照する URL が設定された Location HTTP ヘッダーも応答に記述されています。
以下に、同じ機能を提供する POST
(INSERT
) リクエストの例を 2 つ示します。1 番目の例ではデータが XML ドキュメントで送信され、2 番目の例では JSON ドキュメントで送信されます。
例 1 (XML)
URL = http://localhost:9090/denodo-restfulws/admin/views/internet_inc
HTTP メソッド = POST
HTTP ヘッダー Accept
= application/xml
HTTP ヘッダー Content-Type
= application/xml
リクエストの本文:
<?xml version="1.0" encoding="UTF-8"?>
<internet_inc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<iinc_id>2000</iinc_id>
<summary>New incidence</summary>
<taxid>B99999999</taxid>
<specific_field1 xsi:nil="true" />
<specific_field2 xsi:nil="true" />
</internet_inc>
名前空間 http://www.w3.org/2001/XMLSchema-instance
を定義し、属性 xsi:nil="true"
を specific_field1
フィールドと specific_field2
フィールドに追加することによって、これらのフィールドの値は NULL
になります。
また、ルートエレメントの名前には、 INSERT
クエリの実行対象とするビューの名前が使用されています。
例 2 (JSON)
URL = http://localhost:9090/denodo-restfulws/admin/views/internet_inc
HTTP メソッド = POST
HTTP ヘッダー Accept
= application/json
HTTP ヘッダー Content-Type
= application/json
リクエストの本文:
{
"iinc_id": 2000
, "summary": "New incidence"
, "taxid": "B99999999"
, "specific_field1": null
, "specific_field2": null
}
どちらの例でも、このリクエストを受け取った RESTful Web サービスでは以下のクエリが実行されます。
INSERT INTO internet_inc SET
summary = 'New incidence'
, iinc_id = 2000
, specific_field1 = null
, specific_field2 = null
, taxid = 'B99999999';
UPDATE クエリ (PUT)¶
ビューに UPDATE
クエリを実行するには、そのビューの特定の行を表す URL (ビュー自体を表す URL ではありません) に PUT
リクエストを送信する必要があります。
UPDATE
クエリを実行する URL の構文は、http://localhost:9090/denodo-restfulws/<database name>/views/<view name>/<primary key values> です。
たとえば、http://localhost:9090/denodo-restfulws/admin/views/internet_inc/12 と指定します。
この URL の末尾のセグメント (12
) はプライマリキーの値です。 internet_inc
ビューでは、 IINC_ID
フィールドがプライマリキーです。
プライマリキーが複数のフィールドで構成されている場合、各フィールドの値をカンマ (,
) で区切る必要があります。
プライマリキーの値のいずれかに「,」が使用されている場合は、プライマリキー値の区切り文字として解釈されないように %2C
でエンコードします。
RESTful Web サービスでリクエストが正しく処理されると、HTTP コード 204 (No content) が返されます。
RESTful Web サービスでは、プライマリキーの値を使用して更新対象の行が特定されるので、プライマリキーが定義されていないビューの行を RESTful Web サービスで更新することはできません。
以下に、同じ機能を提供する PUT
(UPDATE
) リクエストの例を 2 つ示します。1 番目の例ではデータが XML ドキュメントで送信され、2 番目の例では JSON ドキュメントで送信されます。
例 1 (XML)
URL = http://localhost:9090/denodo-restfulws/admin/views/internet_inc/2
HTTP メソッド = PUT
HTTP ヘッダー Accept
= application/xml
HTTP ヘッダー Content-Type
= application/xml
リクエストの本文:
<?xml version="1.0" encoding="UTF-8"?>
<internet_inc xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<summary>Incident in ADSL router ...</summary>
</internet_inc>
例 2 (JSON)
URL = http://localhost:9090/denodo-restfulws/admin/views/internet_inc/2
HTTP メソッド = PUT
HTTP ヘッダー Accept
= application/json
HTTP ヘッダー Content-Type
= application/json
リクエストの本文:
{
"summary": "Incident in ADSL router ..."
}
どちらの例でも、このリクエストを受け取った RESTful Web サービスでは以下のクエリが実行されます。
UPDATE internet_inc SET
summary = 'Incident in ADSL router ...'
WHERE iinc_id = 2
WHERE
句は、プライマリキーのフィールド (IINC_ID
) と URL 末尾のセグメントの値 (2
) で構成されています。
DELETE クエリ¶
ビューに DELETE
クエリを実行するには、そのビューの特定の行を表す URL (ビュー自体を表す URL ではありません) に DELETE
リクエストを送信する必要があります。
DELETE
クエリを実行する URL の構文は、http://localhost:9090/denodo-restfulws/<database name>/views/<view name>/<primary key values> です。
たとえば、http://localhost:9090/denodo-restfulws/admin/views/internet_inc/12 と指定します。
この例で、URL の末尾のセグメント (12
) は、プライマリキーの値です。 internet_inc
ビューのプライマリキーは IINC_ID
フィールドです。すでに説明したように、プライマリキーが複数のフィールドで構成されている場合は、各フィールドの値をカンマ (,
) で区切る必要があります。したがって、プライマリキーの値のいずれかにこの文字が使用されている場合、それを %2C
で置き換える必要があります。
RESTful Web サービスでリクエストが正しく処理されると、HTTP コード 204 (No content) が返されます。
RESTful Web サービスでは、プライマリキーの値を使用して削除対象の行が特定されるので、プライマリキーが定義されていないビューの行を RESTful Web サービスで削除することはできません。
DELETE
リクエストは、その本文が空であり、HTTP ヘッダーの Accept
と Content-Type
を追加する必要がない点が、 POST
リクエストと PUT
リクエストとは異なります。