Создать ABAP REST Class для запроса нескольких объектов - PullRequest
0 голосов
/ 21 января 2019

У меня нет шлюза в моем ландшафте, и я хочу использовать библиотеку ABAP REST для предоставления веб-сервисов: SAP Library - Руководство по программированию REST

На очень простом примере я успешно создал класс для чтения списка значений одного домена, вызов 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 для отправки списка идентификаторов для извлечения в теле?

1 Ответ

0 голосов
/ 21 января 2019

Собственные собственные руководящие принципы SAP рекомендуют одинаково формировать OData и обычные REST-сервисы, чтобы избежать путаницы и облегчить переключение между ними:

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

Оба будут обслуживаться одним и тем же классом обработчика конечной точки REST, хотя, конечно, вы можете создавать отдельные методы или делегаты для случаев.

Не забудьте очистить (= белый список / черный список / экранирование) параметров запроса, прежде чем передавать их на какой-то более низкий уровень, чтобы предотвратить атаки с использованием SQL-инъекций, как правильно указал @SandraRossi ниже.

...