Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

Internal Server Error - Não consigo acessar os restaurantes individuais.

Meu código:

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)
    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[nome_do_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}'}

FIz exatamente igual, mas quando tento acessar eu tenho erro que nome_do_restaurante não é defined, mesmo que na aula anterior a gente tenha cortado essa parte do código, e quando tento trocar essa função por outra ou definir nome_do_restaurante tenho o erro de que "list indices must be integers or slices".

Só recebo internal server error na página.

O que é que eu faço?

2 respostas

Oi, Hassan! Como vai?

Analisando o que você enviou, o problema está na linha dados_restaurante[nome_do_restaurante].append(...). A variável nome_do_restaurante não foi criada em nenhum momento do código, por isso aparece o erro de que ela não está definida.

Além disso, dados_restaurante foi iniciado como uma lista ([]), e listas só aceitam índices numéricos, o que explica a mensagem list indices must be integers or slices. Neste caso, como você está filtrando apenas um restaurante, basta adicionar os itens diretamente na lista usando append().

Uma dica interessante para o futuro é utilizar o metodo append() para adicionar elementos em listas de forma segura. Veja este exemplo:


dados_restaurante = []

dados_restaurante.append({
    'item': item['Item'],
    'price': item['price'],
    'description': item['description']
})

Neste exemplo, cada item encontrado e adicionado na lista dados_restaurante, evitando erros de indice ou variaveis nao definidas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Então, esse é o código que passaram na aula.

E o código que enviou já está imbutido no meu código.

O que mais posso fazer?