Служба REST работает через Почтальон, не используя PL / SQL - PullRequest
0 голосов
/ 23 марта 2020

Я новичок в программировании с помощью сервисов REST, и мне не хватает места.

Мне нужно иметь доступ к определенному c набору сервисов REST из Oracle PL / SQL. Парень, который знает об услугах, ничего не знает о PL / SQL. Преодоление разрыва оказывается трудным.

Это в POSTMAN работает: (очевидно, я слишком новичок на сайте, чтобы публиковать скриншоты)

Действие: POST

URL: http://dev-osb.sh.com/LDAP/LDAPVndrMgmt

Авторизация: basi c, имя пользователя и пароль

Тело: Raw, 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 ":" Не найдено приемлемого представления запроса "}"

Если я удаляю часть / LDAP / LDAPVndrMgt из URL, я получаю некоторый HTML код поговорка:

** Ошибка 404 - не найдена

Сервер не нашел ничего, соответствующего Request-URI. Не указывается, является ли условие временным или постоянным.

Если сервер не может sh сделать эту информацию доступной для клиента, вместо этого можно использовать код состояния 403 (Запрещено). Код состояния 410 (Унесенные) СЛЕДУЕТ использовать, если сервер знает через некоторый внутренне конфигурируемый механизм, что старый ресурс постоянно недоступен и не имеет адреса пересылки. **

Итак - что-то не работает правильно , Это похоже на то, что ресурсная часть (начиная с / LDAP ...) не может быть объединена с URL в функции PL / SQL, но без нее я получаю 404. Я надеюсь избежать go маршрут UTL_HTTP. Есть предложения?

1 Ответ

1 голос
/ 24 марта 2020

Прорыв - я обнаружил, что мой PL / SQL отправлял то, что должно было заголовки как параметры .

Вот рабочий код:

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...