本章讨论如何修改REST服务的实现类。
本章假设您以前已经生成了REST服务类,如“创建和编辑REST服务”中所述。
4.1 初始方法定义
实现类最初包含存根方法,如下例所示:
/// 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服务规范定义的契约的签名。
4.2 实施方法
对于实现类中的每个方法,根据使用它的REST调用的情况编辑方法定义(特别是实现)。请注意,该方法前面有一个注释,该注释是相应REST调用描述的副本。在实施过程中:
- 返回适当的值。
- 检查请求消息。为此,请使用实现类的
%CheckAccepts()
、%GetContentType()
和%GetHeader()
方法。这里提到的所有方法都继承自%REST.Impl
,即实现类的超类。 - 根据需要设置HTTP状态代码,以指示资源是否可用。为此,请使用
%SetStatusCode()
方法。有关HTTP状态代码的信息,请参阅http://www.faqs.org/rfcs/rfc2068.html - 设置HTTP响应标头。为此,请使用
%SetHeader()
、%SetHeaderIfEmpty()
和%DeleteHeader()
方法。 - 如果需要,报告错误。为此,请使用%LogError()方法。
有关这些方法的详细信息,请参阅%REST.Impl
类引用。
4.3 公开服务器错误的详细信息
默认情况下,如果REST服务遇到内部错误,则不会向客户端报告错误的详细信息。要更改此设置,请将以下内容添加到实现类中,然后重新编译:
Parameter ExposeServerExceptions = 1;
注意,默认的%ReportRESTError()
方法检查此参数。如果覆盖该方法(请参见下一标题),则可以选择方法是否使用此参数。
4.4 修改错误响应
如果需要以非默认方式格式化错误响应,请重写实现类中的%ReportRESTError()
方法。在方法中,使用%WriteResponse()
方法返回错误响应。
有关这些方法的详细信息,请参阅%REST.Impl
的类引用。