Autonomous AI DatabaseでのSODA for RESTの使用
Autonomous AI Databaseでは、REST用のSimple Oracle Document Access (SODA)がサポートされています。
SODA for RESTの使用の概要
SODA for RESTは、JSONドキュメントをデータベースに格納するために使用できる事前にデプロイされたRESTサービスです
SODAを使用すると、SQLを使用せずに、NoSQLスタイルの柔軟なアプリケーション開発が可能になります。SODAでは、JSONドキュメントは名前付きコレクションに格納され、単純なCRUD操作(作成、読取り、更新および削除)を使用して管理されます。また、SQLは必要ありませんが、SODAコレクションに格納されているJSONは、必要に応じてSQLから引き続き完全にアクセスできます。たとえば、操作アプリケーションはSODAを使用して(SQLを使用せずに)完全に構築できますが、後でアプリケーションの外部からSQLを使用してデータを分析できます。Autonomous AI Database SODAを使用すると、アプリケーション開発者は、分析およびレポートの作成のためにSQLを活用する機能を失うことなく、NoSQLおよびSQLの世界の最適な機能(高速かつ柔軟でスケーラブル なアプリケーション開発)を利用できます。
SODA for RESTは、次のURLパターンでORDSにデプロイされます(schemaはREST対応のデータベース・スキーマに対応します)。
/ords/schema/soda/latest/*次の例では、cURLコマンドライン・ツール(http://curl.haxx.se/)を使用して、RESTリクエストをデータベースに送信します。ただし、他のサード・パーティのRESTクライアントおよびライブラリも動作します。この例では、REST対応のデータベース・スキーマADMINを使用します。cURLコマンドを使用したSODA for RESTは、Oracle Cloud Shellから使用できます。
次のコマンドにより、fruitという名前の新しいコレクションをADMINスキーマで作成します:
> curl -X PUT -u 'ADMIN:<password>' \
"https://example-db.adb.us-phoenix-
1.oraclecloudapps.com/ords/admin/soda/latest/fruit"次のコマンドにより、3つのJSONドキュメントがfruitコレクションに挿入します:
> curl -X POST -u 'ADMIN:<password>' \
-H "Content-Type: application/json" --data '{"name":"orange", "count":42}' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"
{"items":[{"id":"6F7E5C60197E4C8A83AC7D7654F2E375"...
> curl -X POST -u 'ADMIN:<password>' \
-H "Content-Type: application/json" --data '{"name":"pear", "count":5}' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"
{"items":[{"id":"83714B1E2BBA41F7BA4FA93B109E1E85"...
> curl -X POST -u 'ADMIN:<password>' \
-H "Content-Type: application/json" \
--data '{"name":"apple", "count":12, "color":"red"}' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit"
{"items":[{"id":"BAD7EFA9A2AB49359B8F5251F0B28549"...この例では、格納されているJSONドキュメントをコレクションから取得します:
> curl -X POST -u 'ADMIN:<password>' \
-H "Content-Type: application/json" --data '{"name":"orange"}' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/fruit?action=query"
{
"items": [
{
"id":"6F7E5C60197E4C8A83AC7D7654F2E375",
"etag":"57215643953D7C858A7CB28E14BB48549178BE307D1247860AFAB2A958400E16",
"lastModified":"2019-07-12T19:00:28.199666Z",
"created":"2019-07-12T19:00:28.199666Z",
"value":{"name":"orange", "count":42}
}
],
"hasMore":false,
"count":1
}次のSQL問合せで、fruitコレクションにアクセスします:
SELECT
f.json_document.name,
f.json_document.count,
f.json_document.color
FROM fruit f;問合せは、次の3つの行を返します。
name count color
--------- --------- -------
orange 42 null
pear 5 null
apple 12 redノート
ノート: Oracle AI Database 26aiでAlways Free Autonomous AI Databaseを使用している場合、Oracleでは次のことをお薦めします: Oracle Database 21cより前のデータベース・リリースを使用して開始されたプロジェクトの場合、「SODAドライバ」の例で指定されているように、デフォルト・コレクション・メタデータを明示的に指定します。リリースOracle Database 21c以降を使用して開始したプロジェクトでは、デフォルト・メタデータのみを使用します。詳細は、「SODAドライバ」を参照してください。
これらの例は、SODAおよびSQL/JSON機能の一部を示したものです。詳細は、次を参照してください:
-
Simple Oracle Document Access (SODA)の詳細は「SODA for REST」を参照してください。
-
SODA for RESTのHTTP操作の詳細は「SODA for RESTのHTTP操作」を参照してください
SODA for RESTを使用した発注書サンプル・データのロード
Oracleには、大量のJSON発注文書がプレーン・テキスト・ファイルPOList.json内にオブジェクトのJSON配列として用意されており、そのような各オブジェクトがドキュメントを表します。
次の例では、cURLコマンドライン・ツール(http://curl.haxx.se/)を使用して、RESTリクエストをデータベースに送信します。ただし、他のサード・パーティのRESTクライアントおよびライブラリも動作します。この例では、REST対応のデータベース・スキーマADMINを使用します。cURLコマンドを使用したSODA for RESTは、Oracle Cloud Shellから使用できます。
次のcurlコマンドを使用して、SODA for RESTでAutonomous AI Database上のコレクションpurchaseorderに、このサンプル発注書データ・セットをロードできます:
curl -X GET "https://raw.githubusercontent.com/oracle/db-sample-schemas/master/order_entry/POList.json" -o POList.json
curl -X PUT -u 'ADMIN:password' \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/purchaseorder"
curl -X POST -H -u 'ADMIN:password' 'Content-type: application/json' -d @POList.json \
"https://example-db.adb.us-phoenix-1.oraclecloudapps.com/ords/admin/soda/latest/purchaseorder?action=insert"その後、この発注表データを使用して、『Oracle AI Database JSON開発者ガイド』の例を試すことができます。
たとえば、次の問合せでは、JSONドキュメントのidと値の両方を、表purchaseorderの列json_documentに格納されているJSON発注文コレクションの値の両方が選択されます。値は、JSON列json_documentのフィールドPONumber、ReferenceおよびRequestorから選択されます(詳細は、JSON_TABLEのかわりのSQL NESTED句を参照)。
SELECT id, t.*
FROM purchaseorder
NESTED json_document COLUMNS(PONumber, Reference, Requestor) t;詳細は、次を参照してください:
-
Simple Oracle Document Access (SODA)の詳細は「SODA for REST」を参照してください。
-
SODA for RESTのHTTP操作の詳細は「SODA for RESTのHTTP操作」を参照してください
OAuthクライアント資格証明によるSODA for RESTの使用
OAuth認証を使用すると、Autonomous AI Database上のSODA for RESTにアクセスできます。アプリケーションによっては、OAuth認証でSODA for RESTにアクセスすると、パフォーマンスおよびセキュリティが向上することがあります。
OAuth認証を使用してAutonomous AI Database上のSODA for RESTへのアクセスを制限するには、次のステップを実行します:
-
ADMINユーザーとして、データベース・アクションにアクセスし、必要な権限を持つユーザーを作成します。
-
ADMINとしてデータベース・アクションにアクセスします。
詳細は、ADMINとしてのデータベース・アクションへのアクセスを参照してください。
-
「データベース・アクション」では、
をクリックして使用可能なアクションを表示します。 -
「データベース・アクション」で、「管理」の下で「データベース・ユーザー」を選択します。
-
「ユーザーの作成」をクリックします。
-
「ユーザーの作成」領域の「ユーザー」タブで、「ユーザー名」と「パスワード」を入力し、パスワードを確認します。
-
「Webアクセス」を選択します。
-
「ユーザーの作成」領域で、「付与されたロール」タブを選択し、ユーザーに
DWROLEを付与します。 -
「ユーザーの作成」をクリックします。
詳細は、Autonomous AI Databaseでのユーザーおよびユーザー・ロールの管理- データベース・アクションを使用した接続を参照してください。
-
-
データベース・アクションのSQLワークシートを使用して、データのロードに必要なユーザー権限を付与します。
-
ADMINとしてデータベース・アクションにアクセスします。
詳細は、ADMINとしてのデータベース・アクションへのアクセスを参照してください。
-
「データベース・アクション」では、
をクリックして使用可能なアクションを表示します。 -
「データベース・アクション」で、「開発」の下にある「SQL」をクリックして、SQLワークシートを開きます。
-
ステップ1のユーザーに、データをロードするために必要なユーザー権限を付与します。
GRANT UNLIMITED TABLESPACE TO *user_name*;詳細は、Autonomous AI Databaseでのユーザー権限の管理- クライアント・ツールを使用した接続を参照してください。
-
-
ADMINユーザーとしてサインアウトします。
-
OAuth認証を使用するように設定中のユーザーとして、データベース・アクションにサインインします。
-
データベース・アクションで、SQLワークシートを使用してOAuthクライアントを登録します。
-
OAuthクライアントを登録します。
たとえば、SQLワークシートに次のコマンドを入力して、ユーザーおよびクライアント・アプリケーションに適切な値を指定します。
BEGIN OAUTH.create_client( p_name => 'my_client', p_grant_type => 'client_credentials', p_owner => 'Example Company', p_description => 'A client for my SODA REST resources', p_support_email => '*user_name*@example.com', p_privilege_names => 'my_priv' ); OAUTH.grant_client_role( p_client_name => 'my_client', p_role_name => 'SQL Developer' ); OAUTH.grant_client_role( p_client_name => 'my_client', p_role_name => 'SODA Developer' ); COMMIT; END; / -
SQLワークシートで、「スクリプトの実行」をクリックしてコマンドを実行します。
詳細は、「OAUTH PL/SQLパッケージのリファレンス」を参照してください。
これにより、OAuthクライアント資格証明を使用して
my_priv権限にアクセスする、my_clientという名前のクライアントが登録される。 -
-
アクセス・トークンの生成に必要な
client_idおよびclient_secretを取得します。たとえば、SQLワークシートで次のコマンドを実行します:
SELECT id, name, client_id, client_secret FROM user_ords_clients; -
アクセス・トークンを取得します。アクセス・トークンを取得するには、
REST GETリクエストをdatabase_ORDS_urluser_name/oauth/tokenに送信します。database_ORDS_urlは、「関連サービス」の下の「RESTfulサービスおよびソーダ」カードのデータベース・アクションから入手できます。詳細は、「RESTful ServicesおよびSODA for RESTへのアクセス」を参照してください。次のコマンドでは、ステップ6で取得した
client_idおよびclient_secretを使用します。次の例では、
cURLコマンドライン・ツール(http://curl.haxx.se/)を使用して、Autonomous AI DatabaseにRESTリクエストを送信します。ただし、他のサード・パーティのRESTクライアントおよびライブラリも動作します。cURLコマンドライン・ツールを使用して、REST GETリクエストを送信できます。次に例を示します。> curl -i -k --user SBA-iO9Xe12cdZHYfryBGQ..:vvUQ1AagTqAqdA2oN7afSg.. --data "grant_type=client_credentials"https://mqssyowmqvgac1y-doc.adb.region.oraclecloudapps.com/ords/*user_name*/oauth/token HTTP/1.1 200 OK Date: Mon, 22 Jun 2020 15:17:11 GMT Content-Type: application/jsonTransfer-Encoding: chunked Connection: keep-alive X-Frame-Options: SAMEORIGIN {"access_token":"JbOKtAuDgEh2DXx0QhvPGg","token_type":"bearer","expires_in":3600}curl
--user引数を使用してclient_idとclient_secretの両方を指定するには、client_idとclient_secretを区切るコロンを入力します。ユーザー名client_idのみを指定した場合、curlによりパスワードの入力が要求され、プロンプトでclient_secretを入力できます。 -
アクセス・トークンを使用して、保護されたリソースにアクセスします。
前のステップで取得したトークンがAuthorizationヘッダーに渡されます。たとえば:
> curl -i -H "Authorization: Bearer JbOKtAuDgEh2DXx0QhvPGg" -X GET https://*database_id*.adb.region.oraclecloudapps.com/ords/*user_name*/soda/latest HTTP/1.1 200 OK Date: Mon, 22 Jun 2020 15:20:58 GMT Content-Type: application/json Content-Length: 28 Connection: keep-alive X-Frame-Options: SAMEORIGIN Cache-Control: private,must-revalidate,max-age=0 {"items":[],"hasMore":false}
RESTfulサービスへのセキュアなアクセスの詳細は、「RESTfulサービスへのセキュアなアクセスの構成」を参照してください。