代码之家  ›  专栏  ›  技术社区  ›  fire frost

如何在URL中传递RESTAPI的列表?

  •  0
  • fire frost  · 技术社区  · 6 年前

    我正在尝试将ID列表传递给RESTAPI(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内部服务器错误

    我应该如何格式化我的URL,以便在 where id in (ids) 在顶点ORDS?

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

    enter image description here

    2 回复  |  直到 6 年前
        1
  •  2
  •   Kris Rice    6 年前

    SQL无法工作,因为ORDS没有将csv值拆分出来。以便SQL AS将检查 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

        2
  •  0
  •   Kamran Syed    6 年前

    在URL中,逗号“,”具有特殊的含义/用途。它将在URL中分离查询参数,例如

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

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

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