Я новичок в веб-разработке и особенно в REST. Я пытаюсь получить данные пользователя по следующей ссылке, которая представляет собой службу REST, созданную с помощью Datasnap в Delphi: http://XXXXXX: XXX / datasnap / rest / Tdm / LoginUser
У меня нет доступа к серверной части этой службы (или к любому ее коду), однако мне все еще нужно выяснить, как с ней работать.
Фактически вы можете использовать его в браузере вот так: http://XXXXX: XXX / datasnap / rest / Tdm / LoginUser / ANY_STRING / EMAIL@EMAIL.COM/PASSWORD
И он отлично работает, печатает ответ JSON со всеми пользовательскими данными в это.
Теперь я пытаюсь сделать то же самое, но на этот раз с запросом POST через библиотеку запросов в Python. Вот часть рассматриваемого кода:
import requests
import json
task = {
'FAppKey':'test',
'Email':'REDACTED :)',
'Password':'12345'
}
header = {
'Content-Type': 'application/json; charset=utf-8',
'Connection': 'keep-alive',
'Accept': 'text/html',
'Accept-Encoding': 'identity'
}
response = requests.post('http://XXXXX:XXXX/datasnap/rest/Tdm/LoginUser/',
json=json.dumps(task),
headers=header)
print(response, response.text)
Как видите, я пытаюсь отправить запрос POST, содержащий объект JSON с данными указанного c пользователя, которого я хочу увидеть. Однако это не работает. Оператор печати возвращает следующее:
{"error": "Метод Tdm.updateLoginUser не найден в списке методов сервера"}
Что странно, потому что там в API действительно нет такого метода, называемого «updateLoginUser».
Я уверен, что привязка данных и метод LoginUser, в частности, настроены правильно, а проблемы, с которыми я сталкиваюсь, - с моей стороны. Что я делаю не так и как правильно выполнить POST в REST API? Почему Datasnap выводит ошибку, ссылающуюся на другой несуществующий метод?
РЕДАКТИРОВАТЬ: Исправлено!
Пара вещей:
- Когда вы используете POST, DataSnap автоматически добавляет «update» к имени метода (так что «Foo» становится «updateFoo»), ожидая, что у вас будет метод там. Если вы этого не сделаете, вы должны заключить имя метода в кавычки, что, конечно же, в кодировке URL-адреса: "% 22"
- Когда вы передаете несколько параметров в JSON через POST, у вас есть чтобы поместить каждый параметр в список / массив, а затем поместить этот список в dict с ключом «_parameters», например:
task = { "_parameters" : ["param1", "param2", "param3"] }
Для всего этого можно найти документацию здесь .