文章
· 七月 23, 2022 阅读大约需 2 分钟

第五章 修改实现(IMPL)类

第五章 修改实现(IMPL)类

本章讨论如何修改 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.Impl 继承的,它是你的实现类的超类。
  • 根据需要设置 HTTP 状态代码以指示,例如,资源是否可用。为此,请使用 %SetStatusCode() 方法。有关 HTTP 状态代码的信息,请参阅 http://www.faqs.org/rfcs/rfc2068.html
  • 设置 HTTP 响应标头。为此,请使用 %SetHeader()%SetHeaderIfEmpty()%DeleteHeader() 方法。
  • 如果需要,报告错误。为此,请使用 %LogError() 方法。

暴露服务器错误的详细信息

默认情况下,如果 REST 服务遇到内部错误,则不会向客户端报告错误的详细信息。要更改这一点,请将以下内容添加到实现类,然后重新编译它:

Parameter ExposeServerExceptions = 1;

请注意,默认的 %ReportRESTError() 方法会检查此参数。如果您覆盖该方法(参见下一个标题),您可以选择方法是否使用此参数。

修改错误响应

如果需要以非默认方式格式化错误响应,请覆盖实现类中的 %ReportRESTError() 方法。在方法中,使用 %WriteResponse() 方法返回错误响应。

讨论 (0)1
登录或注册以继续