创建ABAP REST类以查询多个实体

时间:2019-01-21 13:16:37

标签: rest abap

我的景观中没有可用的网关,我想使用ABAP REST库公开Web服务:SAP Library - REST Programming Tutorial

通过一个非常简单的示例,我成功创建了一个类来读取单个域值列表,GET调用非常简单:

http://mydomain/domainvalues/XFELD

GET实现在我的类ZCL_REST_DOMAIN_VALUES中,从CL_REST_RESOURCE实现IF_REST_RESOURCE〜GET方法扩展。

现在,我希望能够读取或查询多个域。我不是REST方面的专家,但是我发现有两种搜索选项,一种使用与单个实体相同的URI,另一种使用特殊的URI进行查询。

  • http://mydomain/domainvalues?Id=XFELD,WERKS_D
  • http://mydomain/query/domainvalues?Id=XFELD,WERKS_D

在后端,我是否应该使用第二种方法并仅为此调用创建一个类,该调用名为ZCL_REST_DOMAIN_VALUES_QUERY实例,再次实现GET方法?

或者我应该使用POST方法发送要在体内获取的ID列表吗?

1 个答案:

答案 0 :(得分:2)

SAP自己的内部准则建议对OData和普通的REST服务进行同样的设计,以避免混淆并促进两者之间的切换:

http://mydomain/domainvalues?$filter=Id in ('XFELD', 'WERKS_D')

两者都将由相同的REST终结点处理程序类提供,尽管您当然可以为案例创建单独的方法或委托。

请记住先清理(=白名单/黑名单/转义)查询参数,然后再将其移至较低级别以防止SQL注入攻击,正如@SandraRossi在下面正确指出的那样。