DataService Studio では、コードレス UI またはコードエディタを使用して、既存のデータソースからデータ API を作成できます。このトピックでは、API Gateway を使用して API を作成する手順を説明します。API Gateway の有効化、ビジネスプロセスの作成、API の生成と設定方法について学習します。
クラウドネイティブ API Gateway については、「API の作成、公開、呼び出し (クラウドネイティブ API Gateway)」をご参照ください。
前提条件
ページでデータソースを設定済みであること。詳細については、「データソースの設定」をご参照ください。
データサービスにはリソースグループが必要です。本番環境では、サーバーレスリソースグループの使用を推奨します。詳細については、「リソースグループとネットワーク接続」をご参照ください。
DataService Studio
DataWorks コンソールにログインします。上部のナビゲーションバーで、目的のリージョンを選択します。左側のナビゲーションウィンドウで、 を選択します。表示されたページで、ドロップダウンリストから目的のワークスペースを選択し、[DataService Studio へ移動] をクリックします。
ステップ 1:API Gateway の設定
ビジネスプロセスを作成する前に、API Gateway コンソールで以下のタスクを完了させます。
API Gateway コンソールにログインし、API Gateway を有効化します。
API Gateway コンソールで、API グループを作成します。API グループは、特定の機能やシナリオのための API のコレクションであり、API Gateway における API の基本的な管理単位です。
重要API Gateway のリージョンは、DataWorks ワークスペースのリージョンと一致している必要があります。
ステップ 2:ビジネスプロセスの作成
データサービスでは、ビジネスプロセスを使用して、ビジネスドメインごとに API 開発を整理します。各ビジネスプロセスは、API グループにバインドする必要があります。API を生成する前に、ビジネスプロセスを作成する必要があります。
サービス開発 ページで、
アイコンをクリックし、Create Workflowを選択します。Create Workflow ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
Workflow Name
名前はワークスペース内で一意である必要があります。長さは 4~50 文字で、文字または漢字で始まり、漢字、文字、数字、アンダースコア (_) を含めることができます。
API grouping
ステップ 1 で作成した API グループを選択します。新しいグループを作成するには、API Gateway コンソールに移動します。
重要ビジネスプロセスを API グループにバインドした後、グループを変更することはできません。グループは慎重に選択してください。
Business Description
ビジネスプロセスの説明を入力します。説明は 180 文字を超えることはできません。
Determine をクリックします。ビジネスプロセスが作成されると、Workflow リストで表示できます。
ステップ 3:API モードの選択
データサービスでは、ウィザードモードまたはスクリプトモードで API を作成できます。どちらのモードも基本的な API 設定プロセスは同じですが、クエリロジックの構築方法が異なります。
モードの比較
機能カテゴリ | 機能 | ウィザードモード | スクリプトモード |
クエリオブジェクト | 単一データソースからの単一データテーブルのクエリ | サポート | サポート |
単一データソース内の複数テーブルの JOIN | 非サポート | サポート | |
クエリ条件 | 等価、範囲、あいまい一致クエリ | 演算子の選択によりサポート | カスタム SQL の定義によりサポート |
動的 MyBatis 条件 (オプションパラメーターなど) | 非サポート | アドバンスト SQL モードでサポート | |
クエリ結果 | 生のフィールド値の返却と結果のページネーション | サポート | サポート |
数学演算と集計関数 | 非サポート | サポート |
モードの選択
ウィザードモードの使用:等価、あいまい一致、範囲フィルタリングなど、単一のデータテーブルに対する単純なクエリに使用します。このモードは、API 設定のための視覚的なノーコードインターフェイスを提供します。
スクリプトモードの使用:複数テーブルの JOIN、ネストされたサブクエリ、集約、またはオプションパラメーターを持つ動的条件など、高度なクエリに使用します。
API をウィザードモードからスクリプトモードに変換することはできますが、この変更を元に戻すことはできません。詳細については、「付録:ウィザードモードからスクリプトモードへの変換」をご参照ください。
ステップ 4:API の生成
サービス開発 ページで、
アイコンにカーソルを合わせ、 をクリックします。または、関連するビジネスプロセスを開き、API を右クリックし、 を選択します。
Generate API ダイアログボックスで、パラメーターを設定します。
パラメーター
説明
API Mode
Wizard Mode または Code Editor を選択します。スクリプトモードを選択した場合は、SQL Mode (Basic SQL または Advanced SQL) も選択する必要があります。
Basic SQL:基本的な SQL 構文を使用してクエリロジックを記述します。
Advanced SQL:MyBatis タグをサポートする SQL 構文を使用してクエリロジックを記述します。サポートされているタグには、if、choose、when、otherwise、trim、foreach、where があります。
API Name
名前には漢字、文字、数字、アンダースコア (_) を含めることができます。文字または漢字で始まり、長さは 4~50 文字である必要があります。
APIPath
API のエンドポイントパスです。これは、/user のようなサービスホストに対するリクエストパスです。パスには文字、数字、アンダースコア (_)、ハイフン (-) を含めることができます。スラッシュ (/) で始まり、最大 200 文字の長さである必要があります。
契約
HTTP と HTTPS をサポートします。
HTTPS 経由で API を呼び出すには、API Gateway に公開し、カスタムドメインをバインドし、API Gateway コンソールで SSL 証明書をアップロードする必要があります。詳細については、「HTTPS のサポート」をご参照ください。
Request Method
GET と POST をサポートします。
説明GET を選択した場合、リクエストパラメーターの位置は QUERY である必要があります。POST を選択した場合、この位置は QUERY または Body にすることができます。
Response Type
JSON のみがサポートされています。
目に見える範囲
Work space:API は現在のワークスペースのすべてのメンバーに表示されます。
Private:API はその所有者にのみ表示されます。他のユーザーへの権限付与は現在サポートされていません。
Tag
リストから最大 5 つのタグを選択します。各タグは最大 20 文字です。詳細については、「API タグの作成と管理」をご参照ください。
Description
API の簡単な説明を入力します。説明は 2,000 文字を超えることはできません。
Location
API を保存する既存のビジネスプロセスを選択します。デフォルトのパス構造は「ビジネスプロセス/ビジネスプロセス名/API」です。
Determine をクリックして API 編集ページを開きます。
ステップ 5:API の設定
1. データソースとテーブルの選択
API をダブルクリックして編集ページを開きます。Table エリアで、Data Source Type、Data Source Name、Data Source Environment などのパラメーターを設定します。設定パラメーターはデータソースタイプによって異なります。具体的なパラメーターについては UI をご参照ください。
まず、 でデータソースを設定する必要があります。データテーブルのドロップダウンリストは、テーブル名での検索をサポートしています。
スクリプトモードでは、まずデータソースを選択する必要があります。同じデータソース内でのみ複数テーブルの JOIN クエリを実行できます。
標準モードのワークスペースでは、Data Source Environment パラメーターを使用して、開発環境または本番環境のいずれかのデータソースにアクセスできます。詳細については、「ワークスペースモードの違い」をご参照ください。
MaxCompute データソースの場合、DataWorks DataService の Acceleration Service または MaxCompute の MCQA 機能を使用してクエリを高速化できます。アクセラレーションサービスを使用するには、まずアクセラレーション項目を作成する必要があります。詳細については、「アクセラレーションサービス」をご参照ください。
2. クエリロジックの定義
クエリロジックは、ウィザードモードとスクリプトモードで定義方法が異なります。
ウィザードモード:パラメーターの選択
データテーブルを選択すると、テーブルのすべてのフィールドが自動的に Select Parameters エリアに表示されます。必要なフィールドの Set as Req Param と Set as Resp Param チェックボックスを選択します。
クエリ結果をソートするには、フィールドの横にある Sort ボタンをクリックしてソートリストに追加します。リストには複数のフィールドを追加できます。シーケンス番号が優先度を決定し、数値が小さいほど優先度が高くなります。Move Up と Move Down ボタンを使用して優先度を調整できます。各フィールドについて、Ascending order または Descending order を選択できます。
スクリプトモード:クエリ SQL の記述
Edit Query SQL エリアに、クエリ SQL ステートメントを入力します。
基本 SQL モード:${paramName} を使用してリクエストパラメーターをマークします。SELECT の後のフィールドはレスポンスパラメーターであり、WHERE 句の ${param} はリクエストパラメーターです。
SQL ステートメントを記述する際は、以下のルールに従ってください:
同じデータソース内での単一テーブルクエリ、複数テーブルの JOIN クエリ、ネストされたクエリがサポートされています。
複数の SQL ステートメント、コメント、および
INSERT、UPDATE、DELETEなどの非 SELECT 構文はサポートされていません。SELECT *はサポートされていません。クエリする列を明示的に指定する必要があります。列名にテーブルプレフィックスが含まれる場合 (例:t.name)、エイリアスを割り当てる必要があります (例:t.name as name)。集計関数にもエイリアスを割り当てる必要があります。
${param} を引用符で囲むことはサポートされていません。文字列を連結するには、
concat('abc', ${xyz}, '123')を使用します。基本 SQL モードでは、パラメーターをオプションとして設定することはサポートされていません。
アドバンスト SQL モードは、MyBatis タグ構文 (例:if、choose、when、otherwise、trim、foreach、where) をサポートしており、これにより、null 値の検証、複数値の反復、動的テーブルクエリ、動的ソートなどの複雑なクエリロジックを柔軟に実装できます。一般的なシナリオのコードサンプルについては、「付録:アドバンスト SQL (MyBatis 構文) の例」をご参照ください。
アドバンスト SQL モードで特殊文字を使用する場合は、エスケープする必要があります:
特殊文字 | エスケープ文字 | 説明 |
> | > | より大きい |
>= | >= | 以上 |
< | < | より小さい |
<= | <= | 以下 |
& | & | And |
' | ' | シングルクォーテーション |
" | " | ダブルクォーテーション |
3. リクエストパラメーターの設定
API 編集ページの右側のペインで Request Parameters をクリックして、パラメーターを設定します。
結果をプレビューする前に、API パラメーターのサンプル値、デフォルト値、説明を設定してください。
最高のパフォーマンスを得るために、インデックス付きフィールドをリクエストパラメーターとして使用してください。
アドバンスト SQL モードでは、システムはパラメーターを自動的に解析できません。SQL スクリプトに基づいて、すべてのリクエストパラメーターをリストに手動で追加する必要があります。
ウィザードモードでは、2 つのパラメーターを使用してフィールドの値の範囲を作成することはサポートされていません。この機能を使用するには、スクリプトモードを使用してください。
パラメーター | 説明 |
Parameter Name | 名前には文字、数字、アンダースコア (_)、ハイフン (-) を含めることができます。文字で始まり、最大 64 文字の長さである必要があります。 |
Bound Field | このパラメーターはウィザードモードでのみ表示され、デフォルトで読み取り専用です。選択したデータテーブルフィールドにバインドされます。バインディングを変更するには、スクリプトモードを使用します。 |
Parameter Type | サポートされているタイプ:STRING、INT、LONG、FLOAT、DOUBLE、BOOLEAN。 |
Parameter Position | QUERY または BODY。BODY を選択した場合は、Content-Type を設定する必要があります。サポートされているフォーマットは JSON、XML、FORM です。 |
Operator | このパラメーターはウィザードモードでのみ表示されます。パラメーターの比較演算子を定義します。サポートされている演算子には、=、LIKE、IN、NOT IN、NOT LIKE、!=、>、<、>=、<= があります。 説明 データソースタイプが Table Store の場合、= 演算子のみがサポートされます。 |
Required | API 呼び出しにパラメーターが必須かどうかを指定します。 |
Sample Value | リクエストパラメーターのサンプル値。 |
Default Value | リクエストパラメーターのデフォルト値。 |
Description | リクエストパラメーターの簡単な説明。 |
4. レスポンスパラメーターとページネーションの設定
API 編集ページの右側のペインで Response Parameters をクリックして、パラメーター名、パラメータータイプ、サンプル値、説明を設定します。アドバンスト SQL モードでは、SQL スクリプトに基づいて、すべてのレスポンスパラメーターを手動で追加する必要があります。
Advanced Settings エリアで、Pagination for Return Results を有効にするかどうかを指定します:
無効:API はデフォルトで最大 2,000 レコードを返します。
有効:Resource Group for DataService Studio ページで、リソースグループタイプに基づいて 1 ページあたりの最大レコード数を設定できます。
ページネーションが有効な場合、システムは自動的に以下の共通パラメーターを追加します:
共通リクエストパラメーター:returnTotalNum (レコード総数を返すかどうか)、pageNum (現在のページ番号)、pageSize (1 ページあたりのレコード数)。
共通レスポンスパラメーター:pageNum、pageSize、totalNum (レコード総数)。
API にリクエストパラメーターがない場合は、レスポンスのページネーションを有効にする必要があります。
スクリプトモードで、SQL ステートメントに
limit句が含まれている場合、ページネーションが有効になっているとlimit句は効果がありません。ページネーションの設定が優先されます。
5. フィルターの設定 (オプション)
リクエストパラメーターを前処理したり、クエリ結果を後処理したりするには、右側のナビゲーションペインで Filter をクリックします。Use Pre-filter または Use Post-filter チェックボックスを選択します。次に、Function Type を選択し、関数を選択します。複数の関数を追加でき、追加された順に実行されます。フィルターの作成と使用方法の詳細については、「Aviator 関数の作成」および「Python 関数の作成」をご参照ください。
Python 関数をフィルターとして使用するには、まず DataWorks Professional Edition 以上を有効にし、パブリックサービスリソースグループを使用する必要があります。
Aviator 関数をフィルターとして使用する場合、DataWorks のエディションに制限はありませんが、専用サービスリソースグループを使用する必要があります。
フィルターのドロップダウンリストに関数が表示されない場合は、関数が公開されているかどうかを確認してください。詳細については、「関数の公開」をご参照ください。
6. サービスリソースグループの設定
右側のナビゲーションペインで、Resource Group for DataService Studio をクリックして、API のリソースグループタイプを設定します。
Exclusive Resource Group for DataService Studio または Shared Resource Group for DataService Studio を使用できます。専用サービスリソースグループの場合、名前でターゲットリソースグループを選択できます。パブリックサービスリソースグループは、DataWorks によって自動的に維持されます。
パブリックサービスリソースグループはテスト目的でのみ使用し、本番環境では使用しないことを推奨します。
ターゲットリソースグループがリストにない場合は、[リソースグループ] ページに移動して、リソースグループをワークスペースに関連付けます。
環境構成 エリアでは、メモリ、タイムアウト、Maximum Number of Data Records for a Single Request を設定できます:
タイムアウト:共有 API Gateway インスタンスの場合は 30,000 ms、専用 API Gateway インスタンスを使用する専用サービスリソースグループの場合は 90,000 ms を超えることはできません。
説明API の応答時間は SQL の実行時間に依存します。タイムアウト値を十分に高く設定して、タイムアウトによるリクエストの失敗を防ぎます。
1 ページあたりの最大レコード数:パブリックサービスリソースグループの場合は最大 2,000、専用サービスリソースグループの場合は最大 10,000 です。API が返すことができる結果の総数に制限はありません。
ステップ 6:保存と送信
ツールバーの
アイコンをクリックして API を保存します。選択したリソースグループは、テスト中に有効になります。
次のステップ
テストと公開:
API を設定した後、テストできます。詳細については、「API のテスト」をご参照ください。
テストが成功したら、右上隅の Submission をクリックします。
API 編集ページで、右側のナビゲーションペインの Version をクリックします。公開したいバージョンを見つけ、Request to Publish をクリックします。申請ページで、申請タイプはデフォルトで Publish API in DataService Studio になります。Application Reason を入力し、Requested Permissions をクリックしてリクエストを送信します。
説明DataWorks 承認センターでワークスペースに承認ワークフローが設定されている場合、API を公開する前にリクエストが承認される必要があります。詳細については、「承認センターの概要」をご参照ください。
API が公開されると、DataService Studio のリソースグループの設定がすべての API 呼び出しに適用されます。
API の管理:サービス開発 ページで、ディレクトリツリーから API をクローンまたは削除して管理できます。Service Management ページでは、API リストを展開して公開済み API の詳細を表示できます。詳細については、「API の表示、削除、移動、クローン、バッチ操作、およびコードによる検索」をご参照ください。
付録:ウィザードモードからスクリプトモードへの変換
API をウィザードモードからスクリプトモードに変換できます:
サービス開発 ページで、ターゲット API を含む を展開します。
API 名をダブルクリックして編集ページを開きます。
ツールバーで、
アイコンをクリックします。Prompt ダイアログボックスで、Determine をクリックします。
警告API はウィザードモードからスクリプトモードにのみ変換できます。
この操作は元に戻せません。
付録:アドバンスト SQL (MyBatis) の例
これらの例は、スクリプトモードでアドバンスト SQL を使用して複雑なクエリを構築する方法を示しています。テーブル名、フィールド、クエリ条件はご自身のものに置き換えてください。
例 1:ソート順の制御
var の値によってソート順が決まります。
select col01,col02
from table_name
<choose>
<when test='var == 1'>
order by col01
</when>
<when test='var == 2'>
order by col02
</when>
<when test='var == 3'>
order by col01,col02
</when>
<when test='var == 4'>
order by col02,col01
</when>
</choose>リクエストパラメーター:var (タイプ:INT、必須)。レスポンスパラメーター:col01、col02。
例 2:異なるテーブルのクエリ
var の値によってクエリするテーブルが決まります。
select col01
from
<choose>
<when test='var == 1'>
table_name01
</when>
<when test='var == 2'>
table_name02
</when>
</choose>例 3:動的な WHERE 句
クエリ条件は、list コレクションが空かどうかに基づいて動的に生成されます。list が null でない場合、area フィールドの値を含むクエリ条件が生成されます。
SELECT area_id, area, amount
FROM table_name
<where>
<if test='list!=null'>
area in
<foreach collection="list" open="(" close=")" separator="," item="area">
#{area}
</foreach>
</if>
</where>リクエストパラメーター:list (タイプ:STRING_LIST、必須、例:Beijing,Hangzhou)。レスポンスパラメーター:area_id、area、amount。
付録:ベストプラクティス — オプションパラメーター
多くのビジネスシナリオでは、一部のリクエストパラメーターをオプションにする必要があります。これにより、呼び出し元はパラメーターに値を渡すかどうかを決定できます。値が渡されない場合、そのパラメーターはクエリ条件から除外されます。このセクションでは、ods_user_info_d テーブルを例として、uid を必須パラメーター、gender をオプションパラメーターとして設定する方法を示します。
パラメーター | タイプ | 説明 |
uid | INT | ユーザー ID |
gender | STRING | 性別 |
age_range | STRING | 年齢範囲 |
zodiac | STRING | 星座 |
ウィザードモードでのオプションパラメーター
ウィザードモードでオプションのパラメーターを実装するのは簡単です。Select Parameters エリアで uid と gender をリクエストパラメーターとして選択した後、右側の Request Parameters パネルに移動し、gender パラメーターの Required チェックボックスの選択を解除します。
選択済み:API を呼び出す際にパラメーターの値を指定する必要があります。そうしないと、パラメーター検証例外がスローされます。
クリア:パラメーターに値を渡すかどうかを選択できます。値を渡さない場合、パラメーターはクエリ条件として含まれません。
呼び出し例:
シナリオ 1:
uidとgenderの両方に値が渡されます。システムは次のクエリを実行します:SELECT uid, gender, age_range, zodiac FROM ods_user_info_d WHERE uid = 0016359810821 AND gender = 'Female';シナリオ 2:
uidには値が渡されますが、genderには値が渡されません。システムは次のクエリを実行します:SELECT uid, gender, age_range, zodiac FROM ods_user_info_d WHERE uid = 0016359810821;
スクリプトモードでのオプションパラメーター
基本 SQL では、真のオプションパラメーターロジックを実装できません。Required チェックボックスをオフにしても、パラメーターが省略された場合、システムは parameter = null でクエリを実行します。これは通常、条件を無視するのではなく、空の結果セットを返します。オプションパラメーターを実装するには、アドバンスト SQL モードを使用する必要があります。
アドバンスト SQL モードでは、MyBatis の <if> タグを使用して条件付きロジックを実装します:
SELECT uid, gender, age_range, zodiac
FROM ods_user_info_d
<where>
<if test='gender!=null'>
gender = ${gender}
</if>
and uid = ${uid}
</where><where>タグは、WHERE キーワードを自動的に処理し、冗長な AND または OR プレフィックスを削除します。<if test='gender!=null'>タグは、genderパラメーターに null でない値を渡した場合にのみ、条件をクエリに追加します。SQL ステートメントを設定した後、右側のRequest Parameters パネルで
uidパラメーターとgenderパラメーターを手動で追加し、genderパラメーターのRequired チェックボックスの選択を解除します。
動作はウィザードモードと同じです:値が渡されると gender 条件が適用され、省略されると無視されます。
オプションパラメーターの設定
メソッド | 実装 | 複雑さ | ユースケース |
ウィザードモード | 「必須」チェックボックスをオフにする。 | 低 | 単純な単一テーブルクエリ |
スクリプトモード (基本 SQL) | 非サポート | — | — |
スクリプトモード (アドバンスト SQL) | 条件を | 中 | 複数テーブルの JOIN と複雑なクエリ |