Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida nas rotas

Como o endpoint /api/restaurantes/ não informa quais as rotas possíveis nem quantas são. Eu criei outra rota /api/restaurantes/nomes para listar os valores únicos presentes na grande quantidade de dados.

@app.get("/api/restaurantes/nomes")
def get_nomes_restaurantes():
    url = "https://guilhermeonrails.github.io/api-restaurantes/restaurantes.json"
    response = requests.get(url)

    if response.status_code == 200:
        dados_json = response.json()
        nomes_restaurantes = set()

        for item in dados_json:
            nomes_restaurantes.add(item['Company'])

        return list(nomes_restaurantes)
    else:
        return {"error": f"Erro ao buscar dados: {response.status_code} - {response.text}"}

A minha dúvida é:

Teria outra forma? Foi 'exagero' criar uma nova rota apenas para listar os nomes únicos dos restaurantes?

2 respostas
solução!

Olá, Breno. Tudo bem?

Criar uma nova rota para listar os nomes únicos dos restaurantes não foi exagero. É uma prática comum e válida em APIs criar endpoints específicos para diferentes funcionalidades. Isso torna a API mais organizada e facilita o entendimento e o uso por quem a consome.

Você poderia, por exemplo, criar uma rota que retorne todos os dados dos restaurantes e, ao mesmo tempo, permitir a filtragem para obter apenas os nomes únicos. Mas isso pode deixar a implementação mais complexa.

Aqui está um exemplo de como você poderia implementar essa lógica em uma única rota, usando query parameters:

@app.get("/api/restaurantes")
def get_restaurantes(nomes_unicos: bool = False):
    url = "https://guilhermeonrails.github.io/api-restaurantes/restaurantes.json"
    response = requests.get(url)

    if response.status_code == 200:
        dados_json = response.json()
        
        if nomes_unicos:
            return list(set(item['Company'] for item in dados_json))
        return dados_json
    else:
        return {"error": f"Erro ao buscar dados: {response.status_code} - {response.text}"}

Com esse código, ao chamar /api/restaurantes?nomes_unicos=true, você obterá apenas os nomes únicos. Se chamar apenas /api/restaurantes, receberá todos os dados.

Fique à vontade para utilizar ou não esse código. O fórum está à disposição para mais dúvidas.

Espero ter ajudado. 

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

Muito obrigado pela sugestão