创建 ABAP REST Class 查询多个实体
Create ABAP REST Class to query multiple entities
我的环境中没有可用的网关,我想使用 ABAP REST 库来公开 Web 服务:SAP Library - REST Programming Tutorial
用一个非常简单的例子,我成功创建了一个class来读取单个域的值列表,GET调用非常简单:
http://mydomain/domainvalues/XFELD
GET 实现在我的 class 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
在后端,我是否应该使用第二种方法并仅为此调用创建一个 class 实例 ZCL_REST_DOMAIN_VALUES_QUERY 再次实现 GET 方法?
或者也许我应该使用 POST 方法来发送要在正文中获取的 ID 列表?
SAP 自己的内部指南建议将 OData 和普通 REST 服务塑造成相似的,以避免混淆并促进两者之间的切换:
http://mydomain/domainvalues?$filter=Id in ('XFELD', 'WERKS_D')
两者都将由同一个 REST 端点处理程序提供服务 class,当然您可以自由地为这些案例创建单独的方法或委托。
记得在将查询参数移交给某个较低级别之前清理 (= whitelist/blacklist/escape) 以防止 SQL 注入攻击,正如@SandraRossi 在下面正确指出的那样。
我的环境中没有可用的网关,我想使用 ABAP REST 库来公开 Web 服务:SAP Library - REST Programming Tutorial
用一个非常简单的例子,我成功创建了一个class来读取单个域的值列表,GET调用非常简单:
http://mydomain/domainvalues/XFELD
GET 实现在我的 class 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
在后端,我是否应该使用第二种方法并仅为此调用创建一个 class 实例 ZCL_REST_DOMAIN_VALUES_QUERY 再次实现 GET 方法?
或者也许我应该使用 POST 方法来发送要在正文中获取的 ID 列表?
SAP 自己的内部指南建议将 OData 和普通 REST 服务塑造成相似的,以避免混淆并促进两者之间的切换:
http://mydomain/domainvalues?$filter=Id in ('XFELD', 'WERKS_D')
两者都将由同一个 REST 端点处理程序提供服务 class,当然您可以自由地为这些案例创建单独的方法或委托。
记得在将查询参数移交给某个较低级别之前清理 (= whitelist/blacklist/escape) 以防止 SQL 注入攻击,正如@SandraRossi 在下面正确指出的那样。