Oracle RESTfulサービスについて

OracleでのRESTの実装と、RESTfulサービスの様々なコンポーネントを説明するために使用される用語について説明します。

この項では、Oracle REST Data Servicesによって実装されるRESTfulサービスを紹介し、RESTfulサービスを構成する様々なコンポーネントを参照するApplication Expressやその他のOracleツール内で使用される用語について明確に説明します。

よく使用される用語は次のとおりです。

  • スキーマ別名: RESTfulサービスとともに使用するOracleスキーマを使用可能にする場合、別名を指定する必要があります。大/小文字が区別されるスキーマ別名は、URLを形成するために使用され、ベース・パスおよびURIパターンより前のサーバー・パスに追加されます。

  • リソース・モジュール: 関連するRESTfulサービスをグループ化するために使用されるコンテナです。

  • ベース・パス: RESTfulサービスへのアクセスに使用する大/小文字が区別されるベース・パスです。モジュールのこのベース・パスは、サーバー・パスおよび基礎となるOracleスキーマのスキーマ別名に追加されます。ベース・パスは、スキーマ内で一意である必要があります。

  • RESTfulサービス: RESTfulアーキテクチャ・スタイルの原則に準拠したHTTP Webサービス。

  • リソース・テンプレート: 一部のUniversal Resource Identifier (URI)のセットにサービス要求を行える個別のRESTfulサービス。リソース・テンプレートのURIパターンでは、URIのセットを定義します。

  • URIパターン: 特定のリソースにアクセスするために使用され、ルート・パターンまたはURIテンプレートのいずれでもよい、大/小文字が区別されるパス。リソースのURIパターンは、サーバー・パスおよびリソース・モジュール・ベース・パスに追加されます。URIパターンは、スラッシュの後に追加したバインド変数にも含めることができます。これにより、値をURIの一部としてサービスに渡すことができます。バインド変数構文では、変数名に接頭辞としてコロン(:)が付けられます。

    • ルート・パターン: URIのパス部分をコンポーネント・パーツに分解することに重点をおくパターン。たとえば、/:object/:id?のパターンは/emp/101と一致し(101のidでempリソースにあるアイテムのリクエストと一致)、/emp/とも一致します(:idパラメータには?修飾子の注釈が付き、これはidパラメータがオプションであることを示すため、empリソースのリクエストとも一致します)。

    • URIテンプレート: 所定のリソース・テンプレートが処理可能な特定のURIパターンを定義する簡易文法。たとえば、employees/:idというパターンは、パスがemployees/で始まる任意のURI (employees/2560など)に一致します。

  • リソース・ハンドラ: 特定のリソース・テンプレートで特定のHTTP操作のサービスを行うために必要なロジックを提供します。

  • HTTP操作: HyperText Transport Protocol (HTTP)には、リソースで実行できる標準のメソッド(GET、POST、PUTおよびDELETE)が定義されています。

一般に、アプリケーションで提供するRESTfulサービスごとに、リソース・モジュールおよび子リソース・テンプレートを構成する必要があります。同じリソース・テンプレートに関連付けられたメソッドごとに、リソース・ハンドラを定義する必要があります。たとえば、データを返すメソッドとデータを格納するメソッドを指定するには、それぞれの操作に対してリソース・ハンドラを定義する必要があります。

リソース・モジュールは、関連するRESTfulサービスのセットをグループ化するために使用されるコンテナです。リソース・モジュールは、グループを一意に識別する方法を提供するだけでなく、モジュール内に定義されているサービス・セットにアクセスするためのURLで使用される一意のベース・パスも定義します。

たとえば、従業員に関する情報にアクセスできるリソース・モジュールの名前がoracle.example.hrである場合、サービスのベース・パス値は通常/hr/です。

リソース・テンプレートは、リソース・モジュールの範囲内に存在し、コールできる個々のサービスを定義します。各リソース・テンプレートでは、到達できるURIパターンを定義し、1つ以上のリソース・ハンドラを実装します。リソース・テンプレートによってはリソース・ハンドラの各タイプ(GET、POST、PUT、DELETE)のいずれかのみを実装することはできても、そのいずれも実装しないようにすることはできません。

各リソース・ハンドラでは、1つのHTTP操作のみを実装します。リソース・ハンドラの実装が従来の作成、読取り、更新、削除(CRUD)操作にどのようにマップされるかを理解することが重要です。

  • GET: リソースの表現を取得します(SQLのSELECT文に相当します)。

  • POST: 新しいリソースを作成するか、またはコレクションにリソースを追加します(SQLのINSERT文に相当します)。

  • PUT: 既存のリソースの値を更新します(SQLのUPDATE文に相当します)。

  • DELETE: 既存のリソースを削除します(SQLのDELETE文に相当します)。

少なくとも1つのリソース・ハンドラを実装していない場合、リソース・テンプレートは機能的に不完全であるとみなされます。

機能的に完全なリソース・テンプレートの例として、従業員IDを渡して特定の従業員の詳細を取得する機能を実装したものなどがあります。リソース・テンプレートのURIパターンは、employees/:idのようになります。リソース・ハンドラは、GET操作および次のロジックを使用して実装されます。

select empno, ename, dept from emp where empno = :id 

RESTfulサービスをコールするときには、サーバー・パス、ベース・パスおよびURIテンプレートを使用し、従業員IDの静的値を指定することで、サービスにアクセスします。

http://<<server_address>>/<<schema_alias>>/hr/employees/7978

HTTP GETを使用してこの特定のURLをコールすると、サービスは前述のSQL文の結果を返します。データがどのような形式で返されるかは、リソース・ハンドラの詳細な定義によって異なります。