最近のアクセス:
RestPath アノテーション

API オブジェクトで宣言されたサービスのパスをカスタマイズします。

構文

' [ 'RestPath("/<SubPath1> [ /'{'&var1'}'/'{'&var2'}'/<SubPath2> ] ")' ] '
構文の表記規則の表示
: SubPath と変数の数は、必要に応じて変更できます。また、それらを分散させることもできます。

入力値の説明:
SubPath1,..., SubPathN
     サービスにアクセスするためのパスの一部です。これらは、サービス ベース パスの後に自動的に追加されます。
&var1,..., &varN
    省略可能な変数が API オブジェクト内で定義されています。これは、in 演算子で定義されたサービスのパラメーターである必要があります。


説明

サービスのパスには、所定の方法で、サービス ベース パスとそれに続くサービスの名前が含まれます。このアノテーション (注釈) を使用すると、パスをカスタマイズし、その中に in パラメーターを含めることもできます。
既定では、次に示すように [ Services base path ] プロパティには、定義時に API オブジェクトに割り当てられた名前があります。
イメージ:50368.png
つまり、この例では、API オブジェクトを実行すると、サービスにアクセスするための既定のパスは次のようになります。
http://<AppPath>/APICustomer/ListCustomers
RestPath を使用すると、サービスのパスをカスタマイズできます。たとえば、ListCustomers から Customers に変更するには、次のようにします。
http://<AppPath>/APICustomer/Customers
これを実現するには、サービス定義の前に [ RestPath("/Customers”) ] を追加します。


1.顧客のリストを取得します。
次のようなトランザクションについて考えます:
Customer 
{ 
    CustomerId* (Autonumber property = Yes) 
    CustomerName 
    CustomerLastName 
}
SDTCustomer という名前の Structured Data Type (SDT) オブジェクトを作成します。Customer トランザクションを KB エクスプローラーから SDT 構造にドラッグします。 [ Is Collection ] チェックボックスをオンにして、SDT をコレクションとして定義します。SDTCustomersItem という名前を Customer に置き換えます。
イメージ:50369.png
DPCustomerList という Data Provider オブジェクトを作成し、次のように入力します。
イメージ:50370.png
SDT をデータプロバイダーのソースにドラッグすると、[ Output ] プロパティが SDTCustomer 値で自動的に構成されます。
APICustomer という API オブジェクトを作成し、以下を定義します。
変数:
SDTCustomer (Type:SDTCustomer)
サービスソース:
Customer 
{ 
      [ RestPath("/Customers") ]  
     ListCustomers(out:&SDTCustomer) => DPCustomerList(&SDTCustomer); 
}
DPCustomerList オブジェクトは、ListCustomers というサービスとして公開されます。
最後に、OpenAPI 形式でサービスを公開する場合は、API オブジェクトの [ Generate OpenAPI interface ] プロパティを [ Yes ] に設定する必要があります。
API オブジェクトを実行すると、次のように表示されます。
イメージ:50371.png

2.顧客に関する情報を取得します。
次に、前述の例と同じ顧客取引をビジネスコンポーネントとして定義します。
次に以下の定義を使用して、ReturnOneCustomerData というProcedure オブジェクトを作成します。
変数:
&Customer (Type: Customer) 
&CustomerId (Type:Attribute:CustomerId)
ルール:
​​Parm(in:&CustomerId, out:&Customer);
ソース:
&Customer.Load(&CustomerId) 
if &Customer.Fail() 
     &Customer.CustomerId = 0 
     &Customer.CustomerLastName = "Invalid Customer" 
Endif
注: CustomerId の [ Autonumber ] プロパティが [ Yes ] であることに注意してください。
このプロシージャーは、顧客の ID を受け取り、Load メソッドを使用してデータベースにアクセスし、必要な顧客に対応する情報を返します。情報が見つからない場合は、Customer ID が割り当てられ、値 0 と顧客名には "Invalid Customer"が返されます。
次に、API オブジェクト (たとえば、APICustomer など) を作成し、以下を定義します。
変数:
&Customer (Type: Customer) 
&CustomerId (Type: Attribute:CustomerId) 
&Message (Type: Messages.Message, GeneXus.Common) 
&Messages (Type: Messages, GeneXus.Common)
サービスソース:
Customer 
{ 
       [ RestPath("/Customer/{&CustomerId}") ]  
      GetCustomer(in:&CustomerId, out:&Customer, out:&Messages) => ReturnOneCustomerData(&CustomerId, &Customer); 
}
ReturnOneCustomerData プロシージャーは、GetCustomer というサービスとして公開されます。
イベント:
Event GetCustomer.Before 
      if &CustomerId < 0 
         &RestCode = 412 
         return   
      Endif 
EndEvent 

Event GetCustomer.After 
      if &Customer.CustomerId = 0 
         &Message.Type = MessageTypes.Error 
         &Message.Description = format("Customer %1 not found", &CustomerId)   
         &Messages.Add(&Message) 
         &RestCode = 404   
      Endif 
EndEvent
トリガーイベント GetCustomer.Before は、入力された Id が 0未満かどうかを確認します。この場合、ReturnOneCustomerData プロシージャーは実行されず、エラー 412 (宛先リソースへのアクセスが拒否されました) が返されます。
さらに、GetCustomer.After イベントは、ReturnOneCustomerData プロシージャーの実行と ID 0 の取得に続いて、エラーと説明を返します。それ以外の場合は、入力した顧客のデータが画面に表示されます。
最後に、OpenAPI 形式でサービスを公開する場合は、API オブジェクトの [ Generate OpenAPI interface ] プロパティを [ Yes ] に設定する必要があります。
API オブジェクトを実行すると、次のように表示されます。
イメージ:50372.png
必要に応じて、RestPaht に別の変数を追加できます。たとえば、CustomerName を追加できます。
Customer 
{ 
       [ RestPath("/Customer/{&CustomerId}/{&CustomerName}") ]  
      GetCustomer(in:&CustomerId, in:&CustomerName, out:&Customer, out:&Messages) => ReturnOneCustomerData(&CustomerId, &CustomerName, &Customer); 
}
注:
  • ResPath アノテーションは、たとえば RestMethod と組み合わせることができます。  [ RestMethod(GET),RestPath("/Customer/{&CustomerId}/{&CustomerName}") ]
  • RestPath アノテーションは、その直下のサービスに影響します。

使用可能バージョン

GeneXus 17 Upgrade 9 以降。



サブページ
Created: 22/08/04 03:30 by Admin Last update: 22/12/19 17:43 by Admin
カテゴリ
Powered by GXwiki 3.0