1
resposta

[Dúvida] {"Restaurante":null,"Cardapio":{}}

Boa tarde de novo, mesmo que agora o api/restaurantes/ esteja funcionando ele esta dando esta mensagem:

{"Restaurante":null,"Cardapio":{}}

como posso corrigir?

from fastapi import FastAPI, Query
import requests

app =  FastAPI()

@app.get('/api/hello')
def hello_world():
    return {'Hello':'Wolrd'}

@app.get('/api/restaurantes/')
def get_restaurantes(restaurante: str = Query(None)):
    url = 'https://guilhermeonrails.github.io/api-restaurantes/restaurantes.json'
    response = requests.get(url)
    print(response)

    if response.status_code == 200:
        dados_json = response.json()
        dados_restaurante = {}
        for item in dados_json:
            if item['Company'] == restaurante:
                dados_restaurante.append({
                "item": item['Item'],
                "price": item['price'],
                "description": item['description']
            })
        return {'Restaurante':restaurante,'Cardapio':dados_restaurante}
    else: 
        print(f'Erro: {response.status_code} - {response.text}')
1 resposta

Olá, Vitor, como vai?

O retorno indica que a lógica de filtragem não encontrou uma correspondência para o valor nulo ou que a estrutura de dados utilizada para armazenar o cardápio não condiz com a operação de adição de itens.

No código que você compartilhou, a variável dados_restaurante foi inicializada como um dicionário, utilizando chaves {}, mas a função append é exclusiva de listas. Para que o código funcione corretamente, essa variável deve ser iniciada com colchetes. Além disso, quando nenhum restaurante é passado na URL, a variável restaurante assume o valor None, e a comparação item['Company'] == restaurante resultará em falso para todos os registros, retornando a lista vazia que você visualizou.

Para resolver o primeiro ponto, altere a inicialização:

dados_restaurante = []

Caso deseje que o endpoint retorne todos os dados quando nenhum nome for informado, você pode adicionar uma verificação condicional antes do laço de repetição.

if restaurante is None:
    return {'Dados': dados_json}

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

Caso este post tenha lhe ajudado, por favor, marcar como solucionado