【问题标题】:HTTP POST request with raw body to ORDS PL/SQL Gateway?带有原始正文的 HTTP POST 请求到 ORDS PL/SQL 网关?
【发布时间】:2019-03-09 08:54:56
【问题描述】:

我正在使用 Oracle 数据库 12.2 和 ORDS 18.3。知道 ORDS 仅用于其 PL/SQL 网关部分,而不是 REST 数据服务部分,是否可以使用原始正文(没有使用 application/x-www-form-urlencodedmultipart/form-data 的参数)向 ORDS 发出 HTTP POST 请求。

在这种情况下,独立模式(使用 Jetty)的 ORDS 是 HTTP 服务器。发出请求的 HTTP 客户端是一些外部程序(Postman、Java 等)。

这个想法是发送 JSON 数据,但它可以是二进制数据,如图像或其他东西。

看起来 PL/SQL 网关“仅”能够使用参数调用过程(或者根本没有参数,当然也没有主体)。我可以用多部分形式的虚拟参数发出请求,并以某种方式模拟我想要的(用VARCHAR2 测试,不是CLOB 也不是BLOB),但我想知道是否存在这种可能性。

【问题讨论】:

  • 在 plsql 网关端,您可能想要上传二进制数据的文件。在 ORDS 休息端,它只是有效载荷在 :body 绑定变量
  • 感谢您的澄清
  • 如果您需要其他方面的示例,请务必联系我

标签: oracle plsql oracle-ords plsql-gateway


【解决方案1】:

要回答我自己的问题,这是不可能的。我们必须使用参数和 MIME 类型application/x-www-form-urlencoded(或multipart/form-data)。

【讨论】:

    【解决方案2】:

    您可以使用一对ORDS-specific bind variables (implicit parameters)

    • :body 将返回一个 BLOB。这可用于任何内容,包括图片
    • :body_text 将返回一个 CLOB。这对于 JSON、XML 或您指定的其他 MIME 类型(application/x-www-form-urlencodedmultipart/form-data)等文本主体很有用

    注意:您只能在 PL/SQL 块中取消引用 :body:body_text 参数一次(如 this documentation 所示),因此您可能需要将其分配给使用前的局部变量。

    【讨论】:

    • 确实是这样,但是使用 RESTful Web 服务而不是仅使用 PL/SQL 网关。这就是我写“知道 ORDS 仅用于其 PL/SQL 网关部分,而不是 REST 数据服务部分”的原因。
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 2016-02-11
    • 2020-01-02
    • 2018-03-11
    • 1970-01-01
    • 2019-03-15
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多