Я реализую услуги ReSTful SICF для клиента. Служба SICF имеет единственный обработчик (реализующий IF_HTTP_EXTENSION~HANDLE_REQUEST
), и он вызывает дополнительные классы обработки API. Класс обработки API сохраняется для входящего пути, подобного этому.
DDIC Table: ZAPI_HNLDRS
/animals/:id | ZCL_HANDLE_ANIMALS
/animals/:id/tiger/:id | ZCL_HANDLE_TIGER
При вызове API /animals/:id/tiger/:id
выглядит как /animals/4545152/tiger/1423331
.
Как сделать вызов ZAPI_HNDLRS, чтобы получить ZCL_HANDLE_TIGER?
Конечно, это не поможет,
select single HANDLING_CLASS from ZAPI_HNDLRS
into <wa> where uri = '/animals/4545152/tiger/1423331'
Я считаю, что мне нужно использовать REGEX в той или иной форме, хотя я не уверен, как это сделать. Как сопоставить шаблоны в запросе выбора ABAP?
обновить
Причина, по которой у меня есть таблица для хранения обработчиков API, заключается в том, что я хочу, чтобы весь процесс был динамическим.
У нас могли бы быть новые URL-адреса, которые можно было бы добавлять в течение определенного периода времени, которые могли бы выглядеть так.
Спасибо за ответы, в которых используется SPLIT. Но это все еще не полностью динамично. В будущем может появиться несколько новых URL-адресов. Например.
/animals/:id/tiger/:id/claws
/animals/:id/tiger/:id/claws/:id
:id - is an unique id
При возникновении таких случаев в таблице ZAPI_HNDLRS
появятся новые записи обработчика.
Следовательно, мне понадобится общая логика для преобразования любого входящего пути к ресурсу. скажем: /animals/1234243242423/tiger/32423443344/claws
к сохраненному шаблону /animals/:id/tiger/:id/claws
Так что я знаю правильный обработчик для выбора из таблицы.