Как передать список URL для REST API? - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь передать список идентификаторов в API REST (apex ords).

У меня есть такой URL-адрес:

https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/:ids

, когда я делаю:

https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1

Я получаю элемент с id = 1, но если я делаю:

https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1,2,3

Я получаю 500 Внутренняя ошибка сервера

Как мне отформатировать мой URL, чтобы я могиспользовать список 1,2,3 в where id in (ids) в апекс-ордах?

это скриншот ордов, если он может помочь:

enter image description here

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Этот SQL не будет работать, потому что ORDS не разделяет значения CSV.Так что sql as-is будет проверять id in ( '1,2,3'), а не id in ( 1,2,3)

. Есть несколько способов достичь цели.

Например, используя XMLTABLE

SELECT rownum,object_id
  FROM user_objects
 WHERE rownum IN (
   select (column_value).getstringval() csv_values
        FROM   
     xmltable(('"' || REPLACE(:ids, ',', '","')|| '"'))
 )

Здесь упоминаются и другие способы: Использование предложения «IN» со строкой, разделенной запятыми, из вывода функции replace () в Oracle SQL

Вот API ORDS RESTделать именно то, что вы намерены.enter image description here

0 голосов
/ 21 мая 2018

В URL запятая ',' имеет особое значение / назначение.Он предназначен для разделения аргументов запроса в URL, например,

https://test.me/mypage?firstname=jon,lastname=doe,gender=m

. Таким образом, сервер выдает ошибку 500, поскольку находит поврежденные или неполные пары ключ / значение.Ожидается пара ключ = значение после каждой запятой.Чтобы обойти это, нам нужно urlencode значение, например

https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1%2C2%2C3
...