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-Typeapplication/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

リクエストの本文:

RESTful Web サービス: 本文を XML 形式とした POST リクエスト
<?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

リクエストの本文:

RESTful Web サービス: 本文を JSON 形式とした POST リクエスト
{
    "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

リクエストの本文:

RESTful Web サービス: 本文を XML 形式とした PUT リクエスト
<?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

リクエストの本文:

RESTful Web サービス: 本文を JSON 形式とした PUT リクエスト
{
  "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 ヘッダーの AcceptContent-Type を追加する必要がない点が、 POST リクエストと PUT リクエストとは異なります。