2022年8月3日水曜日

CKEditor5による画像アップロードを実装する(2) - REST APIの作成

CKEditor5にて画像の貼り付けを行なったときに発行される、画像のアップロード要求を受け付けて表RTE_IMAGESに保存する処理と、画像のダウンロード要求を受け付けるREST APIを作成します。

作成するREST APIは、以下の記事で紹介しているREST APIとほとんど同じです。APEXセッションによる保護の設定についても同じです。

Oracle REST Data ServicesのマニュアルにあるImage Galleryのサンプル・アプリを作成する

以下より、今回作成しているアプリケーションのためのREST APIを作成します。

記述する作業は、画像のアップロードとダウンロードに関するものに限定します。それ以外の作業は、上記の記事が参考になります。


画像のアップロードを受け付けるAPIを作成する



SQLワークショップRESTfulサービスを開きます。

左ペインにてモジュールを選択し、モジュールの作成を実行します。


モジュール名としてrteditorベース・パスとして/rteditor/を設定し、モジュールの作成を実行します。本番環境で使用するといったものではないため、公開ONにしておきます。


モジュールrteditorが作成されます。続けて、テンプレートの作成を実行します。


URIテンプレートとしてimageを入力します。テンプレートの作成を実行します。


テンプレートimageが作成されます。ハンドラの作成を実行します。


メソッドPOSTを選択し、ソースに以下を記述します。

ハンドラの作成を実行します。


ハンドラが作成されます。完全なURLはAPEXアプリケーションで使用するため、記録しておきます。


以上で画像をアップロードする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を呼び出すことができるようになりました。