Вызов удаленной процедуры Oracle ORDS: полезная нагрузка и отладка - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь разработать REST API и работаю с: Oracle Database 12c Enterprise Edition, выпуск 12.1.0.2.0 - 64-битная версия, Oracle ORDS и SQL Developer 17.3.1.279.

Я уже разрабатываю и тестирую GET API, чтобы доказать, что БД поддерживает REST.

Я пытаюсь разработать POST API и читаю эту статью

Мой обработчик POST:

declare
    lrow accounts%rowtype := null;    
begin   
    lrow.id := :id;
    lrow.account := :account;

    /*added to inspect the current value*/
    Raise_Application_Error(-20000, '*'||:account||'*');

    lrow.category := :category;
    lrow.address := :address;
    lrow.zipcode := :zipcode;
    lrow.city := :city;
    lrow.county := :county;
    ASADMIN.INSERTACCOUNT(lrow);
    :error := null;
exception
    when others then
        :error := sqlerrm;
end;

Для каждой переменной связывания я создаю соответствующий параметр in / out в обработчике.

Я тестирую API с POSTMAN, передавая этот объект:

{
"id" : "18092018"
,"account" : "Buster Keaton"
,"category" : "TEST CATEGORY"
,"address" : "TEST ADDRESS"
,"zipcode" : "12345"
,"city" : "TEST CITY"
,"county" : "TEST COUNTY"
,"error" : null
}

и ответ был «Невозможно вставить NULL в ...», затем я добавляю ошибку приложения поднятия, чтобы проверить, какое переданное значение приводит к нулю.

Хотелось бы узнать, какая распространенная (или лучшая) предустановка для отладки REST API и способ «мониторинга» переменных связывания.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

После комментирования ответа от thatjeffsmith я сосредотачиваюсь на параметрах обслуживания и переменных связывания и понимаю, что мои настройки были полностью неправильными . Я хотел бы поделиться тем, как я исправляю то, что было моей ошибкой .

В обработчике POST я использую переменную связывания, которую передаю службе в теле запроса, но определяю соответствующие параметры как IN / OUT, поэтому ИСТОЧНИК может быть только HEADER или URI и привязка переменные приводят к нулю.

Я нашел очень полезные эти статьи: Параметры и привязки и resultset .

Я изменяю обработчик, удаляя ВСЕ параметры IN / OUT , поскольку каждая переменная (или объект JSON), передаваемая через тело запроса, автоматически «сопоставляется» с переменными связывания, используемыми в обработчике.

Сейчас я работаю / изучаю набор результатов, чтобы вернуть правильно сформированный объект json со всей информацией, необходимой моему приложению.

0 голосов
/ 29 октября 2018

Я пытаюсь запустить блок anon, прикрепленный к обработчику в SQL Developer, чтобы убедиться, что он сначала будет работать там. Итак, работает ли это в SQL Developer, где вы делаете определение службы restful?

Для тех, кто читает этот вопрос , когда вы хотите «отладить» и не иметь доступа к журналам сервера ORDS: Если при вызове из ORDS вы получаете ответ 500, может быть полезно запустить ORDS в режиме «отладки».

Существует два свойства, которые вы можете включить, отладить и распечатать на экране. ( документы )

Это покажет дамп стека из серверной части в вашем браузере - не то, что вы когда-либо хотели делать в «prod», но, поскольку вы отлаживаете, я предполагаю, что вы в безопасном месте.

Как только это будет сделано, сделайте ваш звонок снова -

enter image description here

Теперь вы можете увидеть код ошибки ORA, который вызывает 500 - и вы также можете увидеть, как ORDS выполняет блок anon plsql - возможно, вы неправильно обрабатываете входные данные ...

Я говорю об этом здесь.

Для вашего конкретного случая у вас либо есть опечатка, либо вы игнорируете значение, когда речь идет о вызове INSERTACCOUNT ().

Не видя спецификации для INSERTACCOUNT (), нам остается только догадываться, что может происходить.

...