我的环境中没有可用的网关,我想使用ABAP REST库来公开web服务:SAP库-REST编程教程
通过一个非常简单的例子,我成功地创建了一个类来读取单个域的值列表,GET调用非常简单:
http://mydomain/domainvalues/XFELD
GET实现在我的类ZCL_REST_DOMAIN_VALUES中,从实现IF_REST_RESOURCE~GET方法的CL_REST_REOURCE扩展而来。
现在我想让它可以读取或查询多个域。我不是REST方面的专家,但我看到了两个搜索选项,一个使用与单个实体相同的URI,另一个使用用于查询的特殊URI。
http://mydomain/domainvalues?Id=XFELD,WERKS_D
http://mydomain/query/domainvalues?Id=XFELD,WERKS_D
在后端,我是否应该使用第二种方法,并仅为此调用创建一个类,例如再次实现GET方法的ZCL_REST_DOMAIN_VALUES_QUERY?
或者我应该使用POST方法发送要在正文中获取的ID列表吗?
SAP自己的内部指导方针建议对OData和普通REST服务进行类似的塑造,以避免混淆并促进两者之间的切换:
http://mydomain/domainvalues?$filter=Id in ('XFELD', 'WERKS_D')
两者都将由相同的REST端点处理程序类提供服务,当然您可以为这些情况创建单独的方法或委托。
正如@SandraRossi在下面正确指出的那样,在将查询参数移交给较低级别之前,请记住对其进行消毒(=白名单/黑名单/转义),以防止SQL注入攻击。