1
resposta

[Dúvida] endpoint retornando null

Estou fazendo o código igual ao da aula, porém sempre que tento chamar o endpoint /api/restaurantes, o retorno da página é "null". Um ponto que reparei, é que no terminal não está sendo informado o "OK" das rotas

Código do arquivo main.py:

#Criando um endpoint

#importando o fastapi
from fastapi import FastAPI, Query
import requests

#criando um objeto do FastAPI
app = FastAPI()

#decorator indicando que queremos disponibilizar um recurso através do api.get
@app.get('/api/hello') #definindo o caminho do endpoint
def hello_world():
    return {'Hello':'World'}

#criando um endpoint para listar o cardápio dos restaurantes
@app.get('/api/restaurantes/')
def get_restaurantes(restaurante: str = Query(None)):
    url = "https://guilhermeonrails.github.io/api-restaurantes/restaurantes.json" #atribuindo a URL do Json à uma variável
    response = requests.get(url) #através do request.get() solicitamos o recurso. Neste exemplo, estamos atribuindo a chamada do Json à uma variável "response"

    # criando uma condicional para que o conteúdo do json seja impresso, caso a resposta HTTP seja 200
    if response.status_code == 200:
        dados_json = response.json() # a função .json() retorna um conteúdo de uma resposta, codificado no formato Json
        if restaurante is None:
            return {'Dados':dados_json}
        
        dados_restaurante = []
        for item in dados_json: #criando um "for" para poder particionar o conteúdo do Json
            if item['Company'] == restaurante:
                dados_restaurante.append({ #nesta lista será incluído um dicionário com as informações de cada item, separadamente
                    "item":item["Item"],
                    "price":item["price"],
                    "description":item["description"]
                })
        return {'Restaurante':restaurante, 'Cardápio': dados_restaurante}

    else:
        return {f'O erro foi {response.status_code} - {response.text}'}

Terminal:

(venv) PS H:\Estudos Alura\Python\venv-oo-sabor-express> uvicorn main:app --reload

INFO: Will watch for changes in these directories: ['H:\Estudos Alura\Python\venv-oo-sabor-express']

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)

INFO: Started reloader process [18428] using StatReload

INFO: Started server process [11636]

INFO: Waiting for application startup.

INFO: Application startup complete.

Retorno na página:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Obs.: Quando uso o hello world, funciona normalmente

1 resposta

Olá, Mateus. Tudo bem?

Vamos resolver isso. Seu endpoint /api/restaurantes/ está retornando null, e pelo que você descreveu, a API não está registrando o "OK" das rotas no terminal. Isso pode estar ligado a alguns pontos:

  1. Verifique a URL do JSON: A URL fornecida no código "https://guilhermeonrails.github.io/api-restaurantes/restaurantes.json" deve estar acessível e retornar dados válidos. Tente acessar essa URL diretamente no navegador para confirmar que está funcionando.

  2. Verifique o Status Code: No código, há uma verificação do status_code da resposta. Certifique-se de que o código está realmente entrando na condição if response.status_code == 200. Você pode adicionar um print(response.status_code) antes dessa linha para verificar se está retornando 200.

  3. Formato dos Dados: Verifique se os dados retornados pela URL estão no formato esperado. Pode ser útil imprimir dados_json para verificar se o conteúdo está correto.

  4. Query String: Quando você acessa /api/restaurantes/ sem um parâmetro de query, o código deve retornar todos os dados. Verifique se a condição if restaurante is None: está sendo atingida.

  5. Erro no Else: Caso o status_code não seja 200, o código deve entrar no else e retornar um erro com response.status_code e response.text. Verifique se isso está acontecendo.

  6. Logs do Servidor: Olhe os logs do servidor para ver se há mais alguma informação sobre o que pode estar acontecendo.

Se após essas verificações o problema persistir, pode ser útil revisar o código junto com o material da aula para garantir que todos os passos foram seguidos corretamente.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!