如何在URL中传递REST api的列表?

时间:2018-05-19 20:45:17

标签: rest oracle-apex oracle-ords

我正在尝试将ID列表传递给REST api(apex ords)。

我有这样的网址:

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内部服务器错误

我应如何格式化我的网址,以便我可以在顶级ords中使用where id in (ids)中的1,2,3列表?

这是ords的屏幕截图,如果它可以提供帮助:

enter image description here

2 个答案:

答案 0 :(得分:2)

由于ORDS不会将csv值拆分掉,因此SQL无法工作。因此,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, ',', '","')|| '"'))
 )

这里提到的其他方法:    Using the "IN" clause with a comma delimited string from the output of a replace() function in Oracle SQL

这是一个完全符合您要求的ORDS REST API。 enter image description here

答案 1 :(得分:0)

在网址中,逗号','具有特殊含义/目的。它是在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