API Hasura с сообщением Python выдает ошибку 404

#python #post #python-requests #hasura

#python #Публикация #python-запросы #hasura

Вопрос:

Я пытаюсь использовать API Hasura для получения содержимого моей базы данных. Подходящей конечной точкой является v1alpha1/pg_dump .

Я попытался выполнить следующее на Python:

 import requests
api_url = 'http://localhost:9695/v1alpha1/pg_dump'
header = {'Content-Type': 'application/json',
          'x-hasura-admin-secret': 'MY_SECRET',
          'X-Hasura-Role': 'admin'}
r = requests.post(url=api_url, headers=header)
 

Если я это сделаю requests.get , я получу информацию обратно (html-код, хотя ничего особенно полезного). Однако, если я это сделаю requests.post (что требуется Hasura: https://hasura.io/docs/1.0/graphql/core/api-reference/pgdump.html ), я получаю ошибку 404. Я не понимаю, почему. Это не ошибка аутентификации, а ошибка «Страница не найдена».

Я неправильно построил свой URL-адрес? Есть ли что-то, что я упускаю? Порт правильный (и если я изменю его в коде, он выдает другую ошибку, сообщающую, что порт недействителен / закрыт). Я не уверен, что еще нужно изменить.

Комментарии:

1. Вы не публикуете никаких данных, не так ли?

2. Я попытался добавить data и / или body поле, но это ничего не изменило. Когда я имел дело с REST API в прошлом, когда что-то вроде данных отсутствует, это выдает другую ошибку. Я никогда не получал ошибку «страница не найдена» для POST из-за отсутствия тела.

Ответ №1:

Итак, я попробовал в своей собственной среде развертывания Digital Ocean 1 click. Я не защитил его, поэтому я не предоставляю никаких заголовков. Он отлично работает следующим образом:

 import requests
import json

r = requests.post('http://address_of_hasura/v1alpha1/pg_dump',
  data = json.dumps({
  'opts' : ['-O', '-x', '--schema-only', '--schema', 'public'],
  'clean_output': True
}) )
print r.text
 

Если вы использовали переменную HASURA_GRAPHQL_ENABLED_APIS env и не включили pgdump ее, это может быть причиной, по которой она будет отключена.

Комментарии:

1. Хм, я попробовал ваш код, заменив ваш URL на мой и добавив свои заголовки, но он все равно печатает 404 page not found