意味
URIテンプレートは、正しいリソースハンドラーを識別するために使用される文字列です。ルーティングアルゴリズムはリソースパスを使用し、接続されているすべてのURIテンプレートと照合して、最適なテンプレートのリソースハンドラーを呼び出します。
残りのライブラリは、3種類のURIテンプレートをサポートしています。
-
静的テンプレート
このケースは、リソースを選択するためにリソースパスが正確に一致する必要がある場合に使用されます。
たとえば、ルータに2つの製造元履歴が関連付けられている場合があります。
-> attach(iv_template =’/ cars_history / masserati’ iv_handler_class =’CL_RESOURCE_MASERATI’)。
-> attach(iv_template =’/ cars_history / ferrari’ iv_handler_class =’CL_RESOURCE_FERRARI’)。
したがって、リソースパスが/ cars_history / ferrariの場合、ハンドラーCL_RESOURCE_FERRARIが呼び出されます。
-
URI属性付き
URI属性により、より柔軟なURIルーティングが可能になります。パターン'{‘ AttributeName ‘}’を使用すると、1つ以上の属性をテンプレートに挿入して、正確なリソースパスだけでなく、あらゆる種類の文字に一致させることができます。これは、コレクションを処理するリソースハンドラーがある場合に特に便利です。
たとえば、次のattachコマンドで登録されたcarsリソースハンドラーがある場合があります。
-> attach(iv_template =’/ cars_history / {MANUFACTURER}’ iv_handler_class =’CL_RESOURCE_MASERATI’)。
したがって、次のリソースパスのいずれかが一致します。
‘/ cars_history / ferrari’
‘/cars_history/maserati’
‘/ cars_history / porsche’
..。
だけでなく、’/ cars_history/1325’。
ルーティング中に、{MANUFACTURER}に一致する変数部分は、中括弧で使用されるAttributeNameという名前のメソッドGET_URI_ATTRIBUTEおよびGET_URI_ATTRIBUTESを使用してRESTリクエストから取得できます。
-
URI正規表現属性を使用
任意の文字に一致する代わりに、URIテンプレートで正規表現を使用することもできます。これらの正規表現は、'{‘ AttributeName:Regex ‘}’の形式で記述されます。ここで、 Regexは、0個以上の文字に一致するABAP正規表現です。
正規表現のあるURIテンプレートとないURIテンプレートを混在させることができます。
次のURIテンプレートを使用して上記のサンプルを取得します。
-> attach(iv_template =’/ cars_history / {ID:[0-9] +}’ iv_handler_class =’CL_RESOURCE_MASERATI’)。
したがって、次のRESTリソースパスのいずれかが一致します。
‘/ cars_history / 0’
‘/ cars_history / 1’
‘/ cars_history / 2’
..。
しかし、そうではありません
‘/cars_history/maserati’
マセラティには数字だけではないからです。
また、リソースパスと一致しません
‘/cars_history/maserati’
車のエンティティのIDは英字で始めてはならないためです。
もう一つの例:
-> attach(iv_template =’/ test / {path:。*}’ iv_handler_class =’CL_RESOURCE_TEST’)。
‘/ test /’で始まるすべてのリソースパスに一致しますが、URI属性パスには’/test/’以降のすべての文字が含まれます。‘/ test / segment1 / person / 1’の場合、URI属性パスは’segment1 / person/1’になります。
URIテンプレートの衝突
2つ以上のURIテンプレートが同じリソースパスに一致する場合があります。たとえば、パターン’/cars/{ID}/color’と’/cars/{ID}/{TIRE}は両方ともリソースパス’/ cars / 1/color’と一致します。
これを解決するために、RESTライブラリはJAX-RSバージョン1.1仕様で定義されているように一致するすべてのURIをソートします。
-
一致するすべてのテンプレートを並べ替えます。
-主キーとして使用:テンプレート内のリテラルの数が降順(中括弧なし)
-二次キーとして使用:降順の変数の数
-
最初の一致を使用します。