手順
リソースハンドラークラスで条件付き処理がオンになっている場合、ETagの提供はハンドラークラス内で実装する必要があります。
条件付き処理を明示的に実装する場合は、リソースハンドラークラスのスーパークラスCL_REST_RESOURCEから保護されたインターフェイスメソッドCL_REST_RESOURCE〜GET_CONDITIONAL_INFOをオーバーライドする必要があります。その条件付き処理メソッド内で、特定の条件付き処理を自由に実装できます。このメソッドのシグネチャは次のとおりです。
パラメータの説明:
-
IV_METHOD:
現在のクライアント要求で使用されているHTTPメソッドが含まれています。可能な値は、GET、PUT、POST、DELETE、HEAD、およびOPTIONSです。実装でのこのパラメータの設定を、インタフェースIF_REST_MESSAGEのHTTPメソッドの事前定義された定数と比較することができます。
-
EV_EXISTING:
ABAP_TRUEを返すことは、要求されたリソースが見つかったことを示します。
-
EV_STATUS:
指定されたHTTPメソッドとリソース識別情報に基づくHTTP応答コード。
-
ES_ETAG:
読み取りが成功した場合のETag値が含まれます。ETagは、RESTライブラリ構造REST_ETAG_Sで形成され、ETag値自体のコンポーネント(コンポーネントTAG)と、ETagが弱いかどうかに関係なくブールインジケーター(コンポーネントWEAK。詳細については、条件付き処理の概要のセクションを参照)を使用します。設定)。このエクスポート値は、HTTP(クライアント)ヘッダーのIf-MatchおよびIf-None-Matchと組み合わせて使用されます。
-
EV_MODIFICATION_DATE:
要求されたリソースの変更日が含まれます。このエクスポート値は、HTTP(クライアント)ヘッダーのIf-Modified-SinceおよびIf-Unmodified-Sinceと組み合わせて使用されます。
-
EV_GET_RESPONSE:
値ABAP_TRUEを介して、応答が条件付き処理要求自体によってすでに生成されていること、およびリソースクラスのMO_RESPONSE属性にすでに正しく入力されているREST応答が含まれていることを示します。この背後にある意図は、リソース状態の読み取りがETAGの決定とほぼ同じ速さである場合があるということです。
このデフォルトの実装では、リソースハンドラーでIF_REST_RESOURCE〜GETメソッドを呼び出し、getメソッドのHTTP応答にヘッダーが存在する場合はヘッダーフィールド「ETag」からETagを抽出します(存在しない場合、条件処理は実行されません)。 。
ただし、GETメソッドを呼び出すと常に完全なリソース状態がロードされるため、これは最もパフォーマンスの高いソリューションではない可能性があります。したがって、指定されたリソースが変更されておらず、304(「変更されていない」)が返される場合、リソース全体をロードすることにより、処理時間が無駄になります。したがって、メソッドGET_CONDITIONAL_INFOを上書きし、ETAGをすばやく判別する方法を提供することをお勧めします。
例:
ETagが一部のリソースデータの最終変更日に基づいている場合、すべてのデータ自体を選択する必要はありませんが、要求されたリソースから更新タイムスタンプを取得するだけです。
エントリのコレクションが要求された場合、ETag計算を行うためだけに要求されたデータを選択することを避けることは、さらに関連性が高くなります。後者の場合、ETagの計算は、たとえば、コレクションに属するリソースの最新のタイムスタンプとその中のエントリの数に基づいて行うことができます。つまり、ETagの計算に必要な情報を取得するために、すべての収集データを選択する必要はありません。