‫Jonas: Bem-vindo de volta, então chegou a
‫hora de finalmente começar a construir nossa API.
‫Portanto, esta palestra será realmente o primeiro
‫passo em uma longa jornada de construção deste projeto do curso principal.
‫E deixe-me começar mostrando novamente o projeto
‫do qual estamos falando.
‫Então este é o projeto Natours.
‫É basicamente um
‫aplicativo onde podemos ver passeios e também reservá-los.
‫Podemos criar contas de usuário, podemos fazer login e realmente
‫fazer todos os tipos de coisas diferentes.
‫Por exemplo, podemos dar uma olhada no tour aqui.
‫Tem todos esses detalhes, esse mapa, tem
‫resenhas de outros usuários que estão usando a plataforma, e a gente pode
‫até agendar o tour aí.
‫Teríamos que fazer login antes de podermos reservar e
‫não vou fazer
‫isso agora porque é apenas uma demonstração muito
‫simples aqui, então eu só queria mostrar essa
‫interface gráfica, basicamente, do projeto que estamos construindo .
‫Agora, esta parte que você está vendo
‫aqui é na verdade a parte que iremos
‫construir no final
‫do curso, porque esta primeira parte
‫do curso é construir uma API usando exatamente os mesmos dados
‫que você vê aqui nesta dinâmica local na rede Internet.
‫Então, novamente, começamos construindo
‫a API e, em seguida, o site renderizado dinamicamente, e
‫eu escolho fazer assim
‫porque, desta forma, não temos
‫que misturar todo esse conteúdo diferente, então, para
‫aprender Express e Mongodb e Mongoose, acho muito mais fácil trabalhar
‫apenas com dados e não me preocupar
‫com as coisas gráficas, embora isso talvez
‫seja um pouco mais empolgante porque
‫você consegue ver os resultados reais nesta
‫bela interface.
‫Mas, para aprender, é melhor novamente, simplesmente lidar
‫com os próprios dados e
‫se preocupar em torná-los bonitos mais tarde.
‫Ok, então deixe-me mostrar a você a API também.
‫E para isso, claro, uso o Postman.
‫Crie uma nova guia aqui.
‫E então a API final que acessamos na
‫API slash, versão slash um, e então, por exemplo,
‫podemos dar uma olhada nos tours.
‫Então, usamos a solicitação
‫get e, em seguida, obtemos todos esses passeios diferentes.
‫Certo, então, novamente, exatamente os mesmos
‫passeios que você viu
‫na interface gráfica, ou no site renderizado antes.
‫Ok, podemos ir em frente, pegar o ID e solicitar apenas
‫aquele ID, então, naquele tour para aquele ID, e você vê que agora
‫só temos este aqui com ainda mais dados
‫do que tínhamos antes.
‫Portanto, temos locais de
‫início aqui, temos guias turísticos que por sua vez têm
‫outros IDs, temos locais, temos comentários, então tudo
‫isso temos em um tour.
‫Como você pode ver, é algo realmente
‫avançado e, na verdade, temos mais do que apenas tours.
‫Temos usuários, mas não poderemos acessá-los
‫porque precisamos ser autenticados.
‫Então você não está logado e agora, precisaríamos
‫fazer o login em nosso aplicativo.
‫Agora, neste ponto, vou parar de
‫mostrar todos os recursos, porque vamos construir
‫isso ao longo
‫do curso, só para mostrar que há muito acontecendo aqui
‫e, portanto, há muito material e coisas para aprender à
‫sua frente, então espero que você
‫esteja animado com isso
‫e que queira dar o primeiro passo comigo agora.
‫Então vamos voltar e implementar o roteiro de tours
‫ou começar a implementá-lo, pelo menos.
‫Ok, então este pedaço de código aqui, não precisamos
‫mais, e não estou excluindo, apenas comentando.
‫Então, novamente, usamos o app. get porque
‫nesta palestra, vamos
‫começar apenas manipulando as
‫solicitações get e a URL será API slash e tours.
‫Portanto, não estou usando
‫a v1, bem, eu poderia usar a v1
‫imediatamente, então é uma boa prática especificar a versão da API.
‫Ok, então caso você queira fazer
‫algumas mudanças em sua
‫API, você pode fazer isso, mas simplesmente na v2
‫sem quebrar todos que ainda estão usando a v1.
‫Ok, então basicamente, você pode ramificar, criar
‫uma nova versão de sua
‫API, mas todos os usuários ainda podem usá-la.
‫Se fizéssemos assim
‫e você fizesse alterações nos tours de barra da
‫API, os usuários que
‫começaram a usá-lo antes de você fazer a alteração teriam alguns problemas.
‫Ok, então sempre devemos especificar a versão da API.
‫Também poderíamos fazer isso
‫no subdomínio, mas é mais fácil simplesmente incluí-lo na URL.
‫Ok, e então, é claro, nosso gerenciador de rotas.
‫É assim que costumamos chamar essa função.
‫Nós o chamamos de manipulador de rota.
‫Ok, apenas para se familiarizar com esses termos do Express.
‫Agora, o que queremos fazer quando alguém atinge essa rota?
‫Bem, queremos simplesmente enviar de volta todos os passeios.
‫Então isso é parecido com o que acabamos
‫de aprender na última palestra, certo.
‫Temos esse URL ou ponto de extremidade, tours de barra,
‫e isso geralmente vai enviar de volta todos
‫os dados desse recurso, certo.
‫Portanto, passeios também são o recurso agora, e estou
‫começando com passeios
‫aqui porque é, eu diria, o mais
‫óbvio, já que estamos construindo um site ou um aplicativo
‫da Web para vender passeios, certo.
‫Agora, onde podemos realmente obter
‫esses passeios que queremos enviar de volta para o cliente?
‫Bem, está aqui na pasta dev-data, depois
‫nos dados e depois nos tours - simples.
‫Então, é esse arquivo JSON, e é muito
‫semelhante ao que tínhamos para o
‫farm de notas, então, novamente, é uma matriz de objetos JSON
‫que tem um monte de dados sobre cada um dos passeios.
‫E então,
‫sim, esses são os dados que enviaremos ao cliente.
‫Agora, antes de
‫enviarmos os dados, precisamos primeiro lê-los
‫e, novamente, não o fazemos dentro do gerenciador de
‫rotas, mas fazemos isso antes.
‫Ok, e assim como expliquei no projeto anterior, podemos
‫fazer isso porque o código
‫de nível superior é executado apenas uma vez, que
‫é logo após a inicialização do aplicativo, certo.
‫E agora que você sabe tudo sobre
‫o loop de eventos, faz ainda mais sentido para você neste ponto, certo.
‫Portanto, apenas esta função de retorno de chamada, por exemplo
‫aqui, será executada dentro do loop de
‫eventos e, portanto, aqui, não podemos ter nenhum bloco e código.
‫Mas lá fora não é problema nenhum.
‫Isso simplesmente lê os passeios em uma variável
‫fora de tudo isso de forma síncrona.
‫Então fs, e para isso,
‫é claro, precisamos exigir o módulo na verdade,
‫e fazemos isso aqui no topo.
‫E eu gosto de sempre começar com os módulos
‫principais, então faço isso no primeiro.
‫Então, exigir, fs, então
‫fs. readFileSync, já está aqui.
‫E agora, vamos usar o dirname.
‫E então, novamente,
‫neste ponto, você já sabe
‫porque temos acesso a essa variável aqui, então dirname é a pasta onde
‫o script atual está localizado, e
‫essa é a pasta principal.
‫Então, a partir daqui, precisamos passar para
‫dev-data, depois para dados e, então,
‫teremos tours simples. json.
‫Ok, e agora vamos também, bem nesta etapa aqui,
‫analisar o resultado disso.
‫JSON, na verdade o
‫maiúsculo, JSON. parse, de modo que o
‫JSON que temos aqui seja automaticamente convertido em um objeto
‫Javascript ou uma matriz de objetos Javascript, na verdade.
‫Então, salvá-lo e isso irá reformatá-lo e agora tudo o que temos
‫a fazer é
‫realmente enviá-lo de volta para o cliente, então
‫res. json,
‫e deixe-me especificar o código de status
‫aqui, mesmo que 200 seja
‫o padrão, gosto de fazer isso em cada uma das respostas.
‫Tudo bem, JSON, e o que queremos enviar de volta agora?
‫Não é mensagem, com certeza.
‫Então, o que queremos enviar de volta?
‫Bem, lembre-se de que
‫iríamos usar o padrão de formatação Jsend JSON.
‫Ok, e aí, especificamos um status e, portanto,
‫o status, e isso
‫pode ser sucesso, falha ou erro, ok.
‫Portanto, o sucesso é óbvio.
‫É quando temos um código 200 ou
‫201 ou qualquer código que comece com 200.
‫Aí temos a falha, que é um erro do cliente,
‫e também temos o
‫erro, quando houve um erro no servidor.
‫Tudo bem, mas vamos usar isso um pouco mais tarde.
‫De qualquer forma, também temos a propriedade data que
‫é, como mencionei,
‫o chamado envelope para nossos dados.
‫Assim, especificamos a propriedade de
‫dados e esses dados, por sua vez, terão um objeto
‫que contém os dados, portanto, a
‫etapa de resposta que realmente queremos enviar.
‫E, neste caso, são os passeios.
‫Então tours e tours, que é o
‫mesmo nome neste caso.
‫Então, com ES6, não precisamos especificar a chave e
‫o valor se eles tiverem o mesmo nome,
‫então poderíamos apenas escrever passeios,
‫mas eu só queria especificar aqui
‫que escrevi passeios aqui porque, bem, esse
‫é o nome do recurso e do endpoint, e é
‫por isso que, dentro
‫dos dados, envio de volta um objeto que tem a propriedade tour.
‫Ok, então se isso fosse chamado de x,
‫por exemplo, eu chamaria
‫este aqui de x, mas aqui, eu ainda precisaria dizer passeios, ok.
‫Estou colocando de volta nas turnês porque faz mais sentido
‫e agora posso deletar isso aqui e deixar assim.
‫E isso é tudo o que precisamos fazer.
‫Portanto, lemos nossos dados e formatamos nossa
‫resposta assim aqui, usando a especificação de dados JSend.
‫Ok, coisas muito simples.
‫Agora vamos apenas testá-lo
‫e agora temos que mudar, é claro, a
‫URL, então temos a API slash, versão um do slash e tours.
‫Então esse é o nosso URL.
‫Ainda fazemos uma solicitação
‫get, e é a essa solicitação que estamos
‫respondendo no código, então lembre-se, usando este
‫método get, clique em Enviar e, de fato, vamos lá.
‫Então, aqui, temos todos os nossos passeios.
‫Então, incrível, isso é muito legal.
‫Trabalho muito, muito bom.
‫Para terminar, outra coisa que gosto
‫de fazer normalmente quando estamos enviando várias respostas é
‫incluir um campo chamado resultados
‫com o número de resultados que estamos enviando.
‫Ok, e isso não faz
‫parte da especificação JSend,
‫mas ainda gosto muito de
‫fazer isso porque torna muito fácil
‫para o cliente obter informações muito
‫rápidas sobre os dados que está recebendo.
‫Portanto, sabemos que passeios são uma matriz e, portanto, tudo
‫o que temos a fazer é dizer passeios. comprimento.
‫Ok, e isso realmente só
‫faz sentido quando estamos enviando um array, então vários objetos.
‫Se estivéssemos enviando apenas um tour, não
‫faria sentido ter resultados como um, certo,
‫então eu só
‫faço isso quando estamos enviando um array
‫com vários objetos nele.
‫Então, vamos fazer isso de novo.
‫E, de fato, temos nove resultados, temos
‫a propriedade de dados, aí, tours, para especificar que
‫estamos enviando tours e,
‫em seguida, uma matriz com todos os nove tours lá.
‫Assim, você pode ver outro objeto
‫e outro e outro, e
‫até o fim,
‫esse é o primeiro passo para a nossa API.
‫Claro, neste ponto, é como uma API baseada em arquivo, então estamos lendo esses dados
‫de uma API, mas mais tarde, é
‫claro, vamos armazenar esses dados em
‫um banco de dados e, em seguida, lê-los de lá.
‫Mas de qualquer forma, isso já parece meio real
‫e com certeza me faz sentir muito
‫bem, e espero que faça você se sentir bem também.
‫Então é isso para a solicitação get.
‫Em seguida, cuidaremos da solicitação de postagem para
‫que possamos adicionar um novo tour aos nossos dados.