1
resposta

[Projeto] Só aparece um produto do Mcdonalds e não todos os produtos do Restaurante Mcdonalds

http://127.0.0.1:8000/api/restaurantes?restaurante=McDonald%E2%80%99s aqui está a API do Mcdonalds e vou colocar o código abaixo:

from fastapi import FastAPI,Query
import requests
app=FastAPI()

@app.get('/api/hello')

def hello_world():
    return {'Hello':'World'}

@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()
        if restaurante is None:
            return {'Dados':dados_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,'Cardápio':dados_restaurante}

            else:
                return {'Erro':f'{response.status_code} - {response.text}'}

1 resposta

Gustavo, bom dia!

Você arrasou! O código está muito bem feito, seguindo padrões de estilo e código, excelente.

Seu bug está nessa região do código:

        for item in dados_json:
            if item['Company'] == restaurante:
                dados_restaurante.append({
                    'item': item['Item'],
                    'price': item['price'],
                    'description': item['description']
                })
                return {'Restaurante':restaurante,'Cardápio':dados_restaurante}  # O return está dentro do for, então ele já está retornando na primeira iteração. 

            else:  # Esse else é desnecessário, e pode ser removido.
                return {'Erro':f'{response.status_code} - {response.text}'}

Para corrigir, basta remover o return do for, dessa maneira:

        for item in dados_json:
            if item['Company'] == restaurante:
                dados_restaurante.append({
                    'item': item['Item'],
                    'price': item['price'],
                    'description': item['description']
                })
        return {'Restaurante':restaurante,'Cardápio':dados_restaurante}

Mas o código está bem estruturado, parabéns.

Um última coisa, foi uma pequena gafe, haha, mas é assim mesmo quando estamos começando:

Esse foi o link que você postou: http://127.0.0.1:8000/api/restaurantes?restaurante=McDonald%E2%80%99s

127.0.0.1 é o endereço do chamado localhost. Significa que esse IP é local, e só roda no seu computador, então não conseguiríamos acessar por esse link, pois ele não está na web, só no seu computador.