Git Product home page Git Product logo

hapi-api-boilerplate's Introduction

Hapi-API-boilerplate Node(8.1.0)

Build Status

js-semistandard-style

Este é um boilerplate baseado no projeto start-hapiness que utiliza Hapi.js e MongoDB, porém foi alterado para aplicar os frameworks Hapi.js e Sequelize(PostgreSQL).

Estrutura do Projeto

Na raiz, temos os diretórios: scripts, data e src.

  • scripts são responsáveis pelos scripts bash, tais como: bootstrap, server e test.
  • data é o diretório que contém os scripts que serão executados.
    • fixtures são dados padrões para o ambiente de teste, desenvolvimento e até mesmo para ambiente de homologação, não sendo necessário cadastrar os dados quando o banco de dados é resetado. Podendo assim, simular um ambiente mais real.
    • migrations são os scripts para criação do banco de dados, como por exemplo criar tabelas, alterar, deletar e etc.
    • seeders são dados reais, que serão executados em todos os ambientes, inclusive no ambiente de produção.
  • src é o diretório principal do código-fonte.
    • core é o local onde fica todos os plugins e os arquivos importantes para o bootstrap do sistema.
      • bin é o local onde fica a configuração responsável por rodar os scripts SQL que será executado com base nos seguintes ambientes: test, development, sandbox e production. De acordo a necessidade, podem ser facilmente alterados.
      • plugins é o local onde ficam os plugins relacionados ao ecossistema Hapi, como auth e log etc.
      • util é o local onde podemos encontrar algumas funções úteis para a API.
    • models é o local onde é definido os modelos do SEQUELIZE.
    • modules é o local onde encontram-se os arquivos das entidades que serão utilizadas na API.
    • test é o local responsável por carregar todo o ambiente de teste.
    • test-utils é o local onde encontram-se algumas funções úteis para os testes da API.

Entidades e Escopos

  • src
    • modules

O diretório modules, é o local onde será criada as entidades da API, como por exemplo task.

  • task
    • admin escopo
      • test
        • task.admin.spec.js
      • task.admin.controller.js
      • task.admin.routes.js
      • task.admin.validation.js
    • public escopo
      • test
        • task.public.spec.js
      • task.public.controller.js
      • task.public.routes.js
      • task.public.validation.js
    • task.schema.js

Na maioria dos casos, precisamos de vários escopos de acesso em uma API. Na estrutura atual existem dois tipos de escopos, admin no qual somente o administrador terá acesso, e public, no qual não é necessário estar logado para enviar uma requisição. Dessa forma, estamos separando as responsabilidades entre os escopos, o que torna mais fácil a manutenção do mesmo.

É obrigatório seguir a estrutura descrita acima, {entidade}.{escopo}.{controller}.js

Você terá os arquivos: {entidade}.{escopo}.routes.js, {entidade}.{escopo}.validation.js e {entidade}.{escopo}.controller.js.

  • task.public.validation.js neste arquivo é especificado as regras para cada endpoint com base no arquivo task.schema.js. . Podendo haver outras regras se necessário.
  • task.public.controller.js é o arquivo responsável pelas regras de negócios.
  • task.public.routes.js é o arquivo que contém as configurações de roteamento do Hapijs.

Geralmente o arquivo {entidade}.schema.js é comum entre os escopos, podendo ficar na raiz do modules de cada entidade.

  • task.schema.js regras de validações como header, params, query entre outras.

Para executar API é necessário configurar as variáveis de ambiente com base no exemplo .envsamble. Caso prefira, crie um arquivo .env e cole as informações do arquivo .envsample e ajuste de acordo com sua necessidade.

Após configurar, execute npm start. Lembrando que para usuários Windows é necessário executar o mesmo através de um terminal tipo Git BASH, acesse scripts e execute ./server.

Para rodar o teste, é necessário existir um banco de dados criado com a seguinte nomenclatura: BD_NAME que é o nome do banco configurado na variável de ambiente seguido por _test, e por fim, basta executar npm test.

Caso você utilize docker, execute docker-compose up -d acesse localhost:8080/documentation e tudo estará funcionando. Você ainda pode rodar com o docker o ambiente de teste docker-compose --file docker-compose-test.yml up você verá os testes sendo executados. Altere algum teste e automaticamente os testes serão executados novamente.

Algumas features implementadas na API

  • JWT Autenticação via token.
  • Swagger Para documentação da API.
  • Paginação Paginação da API.
  • Dynamic Fields Opção para informar quais campos serão retornados na API com base no header. Dynamic
  • Cache Opção para configurar cache em Redis, em alguns casos podemos armazenar em cache informações para otimizar nosso tempo de resposta. Slap

Qualquer sugestão de melhorias ou PR será bem-vinda.

License

Licensed under MIT

hapi-api-boilerplate's People

Contributors

fernandocagale avatar

Stargazers

Gustavo avatar Abel Ferreira avatar Antonio Carlos avatar Milton Filho avatar Lucas Coelho avatar marcosdissotti avatar  avatar Rogério Grando avatar Marcelo Henrique Carneiro avatar Victor Kurauchi avatar Bruno Cechet avatar

Watchers

James Cloos avatar  avatar Gustavo avatar marcosdissotti avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.