Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

実装クラスの変更

この章では、REST サービス実装クラスを変更する方法について説明します。

この章は、“REST サービスの作成と編集” の手順に従って REST サービス・クラスを生成済みであることを前提としています。

初期のメソッド定義

実装クラスには最初、以下の例のようなスタブ・メソッドが含まれています。

/// Returns all pets from the system that the user has access to<br/>
/// The method arguments hold values for:<br/>
///     tags, tags to filter by<br/>
///     limit, maximum number of results to return<br/>
ClassMethod findPets(tags As %ListOfDataTypes(ELEMENTTYPE="%String"), limit As %Integer) As %Stream.Object
{
    //(Place business logic here)
    //Do ..%SetStatusCode(<HTTP_status_code>)
    //Do ..%SetHeader(<name>,<value>)
    //Quit (Place response here) ; response may be a string, stream or dynamic object
}

いずれの場合も、これらのスタブ・メソッドには、REST サービスの仕様で定義されたコントラクトに従ったシグニチャがあります。

メソッドの実装

実装クラスの各メソッドについて、それを使用する REST 呼び出しに応じてメソッド定義 (具体的には実装) を編集します。メソッドの前に、対応する REST 呼び出しの説明のコピーであるコメントが含まれています。この実装では、以下の処理を行います。

  • 適切な値を返します。

  • 要求メッセージを検証します。そのためには、実装クラスの %CheckAccepts() メソッド、%GetContentType() メソッド、および %GetHeader() メソッドを使用します。ここで説明するメソッドはすべて、実装クラスのスーパークラスである %REST.ImplOpens in a new tab クラスから継承されます。

  • 必要に応じて HTTP ステータス・コードを設定して、リソースが使用可能だったかどうかなどを示します。そのためには、%SetStatusCode() メソッドを使用します。HTTP ステータス・コードについては、http://www.faqs.org/rfcs/rfc2068.htmlOpens in a new tab を参照してください。

  • HTTP 応答ヘッダを設定します。そのためには、%SetHeader() メソッド、%SetHeaderIfEmpty() メソッド、および %DeleteHeader() メソッドを使用します。

  • 必要に応じてエラーを報告します。そのためには、%LogError() メソッドを使用します。

これらのメソッドの詳細は、%REST.ImplOpens in a new tab のクラスリファレンスを参照してください。

サーバ・エラーの詳細の公開

既定では、REST サービスで内部エラーが発生した場合、エラーの詳細はクライアントに報告されません。これを変更するには、実装クラスに以下のパラメータを追加した後、リコンパイルします。

Parameter ExposeServerExceptions = 1;

既定の %ReportRESTError() メソッドは、このパラメータをチェックします。そのメソッドをオーバーライドする場合 (次の見出しを参照)、メソッドでこのパラメータを使用するかどうかを選択できます。

エラー応答の変更

エラー応答の形式を既定以外の方法で設定する必要がある場合は、実装クラスの %ReportRESTError() メソッドをオーバーライドします。独自のメソッドで、%WriteResponse() メソッドを使用してエラー応答を返します。

これらのメソッドの詳細は、%REST.ImplOpens in a new tab のクラスリファレンスを参照してください。

FeedbackOpens in a new tab