【问题标题】:REST service works via Postman, not using PL/SQLREST 服务通过 Postman 工作,而不是使用 PL/SQL
【发布时间】:2020-07-04 08:37:24
【问题描述】:

我是使用 REST 服务编程的新手,但我遇到了一些困难。

我需要能够从 Oracle PL/SQL 访问一组特定的 REST 服务。了解服务的人对 PL/SQL 一无所知。事实证明,缩小差距很困难。

这在 POSTMAN 中有效: (显然我对这个网站太陌生,无法发布屏幕截图)

动作:POST

网址:http://dev-osb.sh.com/LDAP/LDAPVndrMgmt

授权:基本、用户名和密码

正文:原始,JSON

{
"requestType": "listAccounts",
"uid": "FTTestDlete100",
"vendorRole": "FreightTrackingLATA" }

我得到了 JSON 格式的所有预期结果。

这个 PL/SQL 应该(据我所知)做同样的事情,但事实并非如此。

DECLARE
    l_clob clob;    
    l_json clob;

BEGIN

  --create the JSON request body  
  apex_json.initialize_clob_output();  
  apex_json.open_object();  
  apex_json.write('requestType', 'listAccounts');  
  apex_json.write('uid', 'FTTestDlete100');  
  apex_json.write('vendorRole', 'FreightTrackingLATA');
  apex_json.close_all();  

  l_json := apex_json.get_clob_output();  
  apex_json.free_output();

 l_clob := apex_web_service.make_rest_request(
              p_url => 'http://dev-osb.sh.com/LDAP/LDAPVndrMgt',
              p_username => 'theUserName',
              p_password => 'thepassword',
              p_http_method => 'POST',
              p_parm_name =>  apex_util.string_to_table('Content-Type'),
              p_parm_value => apex_util.string_to_table('application/json'),
              p_body => l_json
              );

    dbms_output.put_line(to_char(l_clob));
END;

如图所示,我得到 "{ "errorMessage" : "No Acceptable request representation was found" }"

如果我从 URL 中删除 /LDAP/LDAPVndrMgt 部分,我会得到一些 HTML 代码:

**错误 404--未找到

服务器没有找到任何匹配 Request-URI 的东西。没有说明这种情况是暂时的还是永久性的。

如果服务器不希望向客户端提供此信息,则可以使用状态代码 403(禁止)来代替。如果服务器通过一些内部可配置的机制知道旧资源永久不可用并且没有转发地址,则应该使用 410(Gone)状态码。**

所以 - 有些事情不正常。就像资源部分(从 /LDAP 开始...)不能连接到 PL/SQL 函数中的 URL,但没有它我会得到 404。我希望避免走 UTL_HTTP 路由。有什么建议吗?

【问题讨论】:

    标签: oracle rest plsql oracle-apex


    【解决方案1】:

    突破 - 我发现我的 PL/SQL 正在发送应该是 headers 作为 parameters 的内容。

    这是工作代码:

    DECLARE
        l_clob clob;    
        l_json clob;
    
    BEGIN
        apex_web_service.g_request_headers(1).NAME := 'Content-Type';
        apex_web_service.g_request_headers(1).VALUE := 'application/json';   
    
      --create the JSON request body  
      apex_json.initialize_clob_output();  
      apex_json.open_object();  
      apex_json.write('requestType', 'listAccounts');  
      apex_json.write('uid', 'FTTestDlete100');  
      apex_json.write('vendorRole', 'FreightTrackingLATA');
      apex_json.close_all();  
    
      l_json := apex_json.get_clob_output();  
      apex_json.free_output();
    
     l_clob := apex_web_service.make_rest_request(
                  p_url => 'http://dev-osb.sh.com/LDAP/LDAPVndrMgt',
                  p_username => 'theUserName',
                  p_password => 'thepassword',
                  p_http_method => 'POST',
                  p_body => l_json
                  );
    
        dbms_output.put_line(to_char(l_clob));
    END;
    

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多