CKEditor5にて画像の貼り付けを行なったときに発行される、画像のアップロード要求を受け付けて表RTE_IMAGESに保存する処理と、画像のダウンロード要求を受け付けるREST APIを作成します。
作成するREST APIは、以下の記事で紹介しているREST APIとほとんど同じです。APEXセッションによる保護の設定についても同じです。
Oracle REST Data ServicesのマニュアルにあるImage Galleryのサンプル・アプリを作成する以下より、今回作成しているアプリケーションのためのREST APIを作成します。
記述する作業は、画像のアップロードとダウンロードに関するものに限定します。それ以外の作業は、上記の記事が参考になります。
画像のアップロードを受け付けるAPIを作成する
SQLワークショップのRESTfulサービスを開きます。
左ペインにてモジュールを選択し、モジュールの作成を実行します。
モジュールrteditorが作成されます。続けて、テンプレートの作成を実行します。
URIテンプレートとしてimageを入力します。テンプレートの作成を実行します。
テンプレートimageが作成されます。ハンドラの作成を実行します。
メソッドにPOSTを選択し、ソースに以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_id rte_images.id%type; | |
begin | |
/* | |
* アップロードされた画像は:bodyにバイナリ・データとして保持されている。 | |
* :content_typeはORDSが設定してくれている。 | |
* :current_userはAPEXセッションによる保護をかけた場合、APP_USERになる。 | |
*/ | |
insert into rte_images(content_type, image, created_by, created) | |
values(:content_type, :body, :current_user, sysdate) | |
returning id into l_id; | |
:status_code := 201; | |
/* | |
* アップロードに成功した場合は、urlとしてダウンロードするリンクをJSON形式で返す。 | |
* ex: | |
* { | |
* "url": "https://hostname/ords/apexdev/rteditor/image/322343253253" | |
* } | |
*/ | |
apex_json.open_object; | |
apex_json.write( | |
p_name => 'url', | |
p_value => owa_util.get_cgi_env('REQUEST_PROTOCOL') || | |
'://' || | |
owa_util.get_cgi_env('SERVER_NAME') || | |
owa_util.get_cgi_env('SCRIPT_NAME') || | |
owa_util.get_cgi_env('PATH_INFO') || | |
'/' || l_id | |
); | |
apex_json.close_object; | |
exception | |
when others then | |
/* エラーを返す。 | |
* { | |
* "error": { | |
* "message": "Something wrong!" | |
* } | |
* } | |
*/ | |
apex_json.open_object; | |
apex_json.open_object('error'); | |
apex_json.write('message', 'Something wrong!'); | |
apex_json.close_object; | |
apex_json.close_object; | |
end; |
ハンドラの作成を実行します。
以上で画像をアップロードするAPIの実装は完了です。
画像をダウンロードするAPIを作成する
左ペインにてモジュールrteditorを選択し、テンプレートの作成を実行します。
URIテンプレートとしてimage/:idを設定します。
画像のアップロードを受け付けるREST APIは、自分自身のURLに画像のIDを付加したURLを、画像のダウンロードURLとして返しています。そのため、ここで指定するテンプレートは(アップロードのテンプレートがimageなので)必ずimage/:idとします。
テンプレートの作成を実行します。
テンプレートimage/:idが作成されます。ハンドラの作成を実行します。
メソッドとしてGET、ソース・タイプとしてMedia Resourceを選択します。ソースに以下の1行を記載します。
select content_type, image from rte_images where id = :id
ハンドラの作成を実行します。
ハンドラが作成されました。
以上で画像をダウンロードするAPIの実装は完了です。
REST APIを保護する
作成したREST APIを、APEXで認証されたセッションからのみ呼び出しができるように保護します。マニュアルでは、ファースト・パーティ認証として説明されています。
ロールは新規作成せず、デフォルトで作成されているRESTful Servicesを使います。
権限の名前をrteditor、タイトルは画像付き文書とします。ロールとしてRESTful Services、保護されたモジュールとしてrteditorをそれぞれ選択し、権限の作成をクリックします。
以上でモジュールrteditorのREST APIの保護が設定されました。
ユーザーとグループの管理を開き、モジュールrteditorのREST APIを呼び出すAPEXユーザーにRESTful Servicesのロールを割り当てます。
ロールを割り当てるユーザーの設定を開き、グループ割当てのセクションでRESTful Servicesを割り当てます。
変更の適用を実行します。
これで、グループ割当て(ロール)としてRESTful Servicesが割り当たったユーザーでサインインしたAPEXアプリケーションより、作成したREST APIを呼び出すことができるようになりました。