意味
IF_HTTP_EXTENSION
このインターフェイスは、インターネット通信フレームワーク(ICF)の一部です。IF_HTTP_EXTENSIONを実装するクラスはすべて、ICFサービスを構築するためのURLのICFサービスリポジトリに登録できます。
単一の方法HANDLE_REQUESTICFがURLに一致するHTTP要求を処理するたびに、インターフェイスのが呼び出されます。このインターフェイスを実装するクラスは、通常、HTTPハンドラーまたはICFハンドラーと呼ばれます。
ICFサービスの登録の詳細については、 ICFのドキュメントを参照してください。
IF_REST_APPLICATION
インターフェイスIF_REST_APPLICATIONは、GET_ROOT_HANDLER方法。このメソッドは、RESTアプリケーションで定義する必要があり、タイプIF_REST_HANDLERのインスタンスを返す必要があります。デフォルトでは、これはクラスCL_REST_ROUTERのインスタンスであり、アプリケーションによって公開されたRESTリソースへの可能なルートが含まれています。
CL_REST_HTTP_HANDLER
概要
CL_REST_HTTP_HANDLERは、すべてのRESTアプリケーションの基本クラスです。新しいRESTアプリケーションは、CL_REST_HTTP_HANDLERの新しいサブクラスを実装し、メソッドIF_REST_APPLICATION〜GET_ROOT_HANDLERを実装して、RESTアプリケーションを構築するリソースを定義することで作成できます。このサブクラスはしばしばアプリケーションクラスと呼ばれ、ICFサービスリポジトリで直接使用できます。
詳細
CL_REST_HTTP_HANDLERは、インターネット通信フレームワークへの統合とRESTアプリケーションのベーシスクラスの2つの目的を果たす抽象クラスです。
-
インターネット通信フレームワークへの統合
ABAPスタック上のすべてのHTTPサーバーアプリケーションはICFを使用する必要があるため、HTTPで呼び出すことができるようにサービスURLとICFハンドラークラスを使用してICFサービスを実装する必要があります。これは、すべてのRESTアプリケーションにも当てはまります。ただし、すべてのRESTアプリケーションに独自のICFサービスハンドラー(メソッドIF_HTTP_EXTENSION〜HANDLE_REQUESTの実装を意味する)を作成させる代わりに、RESTライブラリーはクラスCL_REST_HTTP_HANDLER内に汎用RESTHTTPハンドラーを提供します。この実装はCL_REST_ROUTERと連携して、REST要求を処理し、消費性を向上させます。
-
RESTアプリケーションの基本クラス
汎用RESTHTTPハンドラーは、ICFオブジェクトを使用して、要求URLによって識別されるRESTリソースを選択するために必要なすべての情報を収集し、リソースハンドラーを呼び出します。これを行うには、利用可能なすべてのリソースとそれらを識別するためのリソースパスのリスト、「ルーター情報」が必要です。このルーター情報は、メソッドGET_ROOT_HANDLERを含むインターフェースIF_REST_APPLICATIONを使用して、RESTHTTPハンドラーに渡されます。このメソッドは、リソースパスとリソースクラスを格納するCL_REST_ROUTERのインスタンスを作成して返すために、各RESTアプリケーションで定義する必要があります。
IF_REST_HANDLER
このインターフェースは、RESTリクエストを処理できるすべてのクラスを呼び出すために使用されます。現在、このインターフェイスを実装できるクラスはCL_REST_ROUTERとCL_REST_RESOURCEのみです。このインターフェース(特にHANDLEメソッド)を実装するためにRESTアプリケーションは必要ありませんが、さまざまなメソッドの入力パラメーター・タイプとして使用されます。
CL_REST_ROUTER
残りのルーターは、リソースハンドラークラスとそれに関連付けられたREST URIテンプレートを格納し、RESTルートによって識別される適切なリソースを選択して呼び出すためのアルゴリズムを提供します。
通常、ルーターはアプリケーションクラスのGET_ROOT_HANDLERメソッドでインスタンス化されます。リソースクラスとそのURIテンプレートは、ATTACHメソッドを使用してアタッチできます。このATTACHメソッドは、URLテンプレートとクラス名を入力として使用します。tで指定されたクラスは、<クラス名>で指定されたクラスが適切に呼び出し可能であるようにIF_REST_RESOURCEインターフェースを実装する必要があります。コーディングをアクティブ化するときの設計時にクラス名を確認する可能性がないことに注意してください。そのため、注意して名前を2回確認してください。
オプションで、パラメータリストを渡して関数をアタッチできます。RESTリクエストの処理中に、これらのパラメーターはリソースハンドラークラスのコンストラクターに渡されます。
次の図は、サーバー側の制御フローの概要を示しています。
サーバー側の制御フロー
IF_REST_RESOURCE
6つのHTTPメソッドを反映するメソッドGET、POST、PUT、DELETE、HEAD、およびOPTIONSを定義するインターフェースIF_REST_RESOURCE。このインターフェースをRESTアプリケーション開発者だけが実装する必要はありませんが、代わりにCL_REST_RESOURCEから継承します。
CL_REST_RESOURCE
クラスCL_REST_RESOURCEは、すべてのRESTリソースの指定された基本クラスです。アプリケーションリソースクラスはこのクラスを継承し、一部のメソッドを上書きしてアプリケーションリソース固有の動作を実装することを目的としています。
クラスCL_REST_RESOURCE:
-
IF_REST_HANDLERインターフェースを実装します。したがって、CL_REST_RESOURCEのすべての派生クラスは、URIテンプレートと一緒にRESTルーターにアタッチできます。
-
デフォルトのGET、POST、PUT、…メソッド実装を使用してIF_REST_RESOURCEインターフェースを実装し、405(「メソッドは許可されていません」)HTTP応答コードを生成します。
-
適切なIF_REST_RESOURCEメソッドにリクエストをディスパッチするためのIF_REST_HANDLER->handleメソッドのデフォルトの実装が含まれています。
-
デフォルトの条件付き処理の実装を提供します。
次のインスタンス属性は、サブクラスでアクセスできます。
-
MO_REQUEST
着信(サーバー側)または発信(クライアント側)HTTP要求からの利用可能なすべてのデータを含むインターフェースIF_REST_REQUESTへの参照。
-
MO_RESPONSE
発信(サーバー側)または着信(クライアント側)HTTPリクエストからの利用可能なすべてのデータを含むインターフェースIF_REST_RESPONSEへの参照。
-
MO_CONTEXT
IF_REST_CONTEXTへの参照
-
MV_CONDITIONAL
コンストラクタでABAP_TRUEに設定されている場合、HANDLEメソッドは条件付き処理を実行します。
RESTライブラリでの条件付き処理の詳細については、RESTライブラリへの条件付き処理の統合を参照してください。
サーバー側で上書きされたメソッドに期待されるセマンティック:
-
得る
MO_REQUESTオブジェクトからのURI属性およびURIクエリパラメータデータを使用して、正しいアプリケーションデータ(たとえば、データベーステーブルまたはビジネスオブジェクトから)を選択し、アプリケーションデータをシリアル化し、シリアル化されたコンテンツをMO_RESPONSEオブジェクトに設定します。
-
役職
MO_REQUESTからのURI属性とURIクエリパラメータデータ、およびリクエストコンテンツを使用して、新しいアプリケーションデータを作成します(たとえば、テーブルへの追加、ビジネスオブジェクトインスタンスの作成)。
-
置く
MO_REQUESTからのURI属性とURIクエリパラメータデータ、およびリクエストコンテンツを使用して、アプリケーションデータを更新します(たとえば、テーブルエントリまたはビジネスオブジェクトを変更します)。
-
消去
MO_REQUESTのURI属性とURIクエリパラメータデータを使用するため、アプリケーションデータを選択して削除します。
-
頭
GETと同様ですが、サーバーはMO_RESPONSEオブジェクトを含むコンテンツを返さないようにする必要があります。
-
オプション
このリソースに関連付けられている可能性のあるオプション/要件に関する情報を送り返します(めったに使用されません)。