如何为 REST api 传递 url 中的列表?

How do I pass a list in url for a REST api?

我正在尝试将 ID 列表传递给 REST api(顶点顺序)。

我有一个像这样的 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 以便我可以在 apex ords 的 where id in (ids) 中使用 1,2,3 列表?

如果有帮助的话,这是ords的截图:

在URL中,逗号','有特殊的meaning/purpose。它是在 url 中分隔查询参数,例如

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

所以服务器在发现损坏或不完整的 key/value 对时抛出 500 错误。它期望每个逗号后有 key=value 对。为了解决这个问题,我们需要url对值进行编码,例如

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

SQL 将不起作用,因为 ORDS 不会拆分 csv 值。这样 sql 将按原样检查 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 完全按照您的意图进行。