如何为 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 完全按照您的意图进行。
我正在尝试将 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 完全按照您的意图进行。