Giter VIP home page Giter VIP logo

api_estudo's Introduction

Store API

Exemplo de API com ASP.NET 5, Dapper, cache, padrão REST, CQRS, testes unitários, logs com ELMAH, swagger, etc.

Estrutura do projeto

  • Store.Api: aplicação (application service) com output web do projeto
  • Store.Domain: regras de negócio da aplicação
  • Store.Infra: tem conhecimento sobre detalhes das implementações concretas da infraestrutura tais como: acesso a bancos de dados, acesso a rede, controle de operações de IO, acesso a hardware etc.
  • Store.Shared: compartilhado com restante do projeto.
  • Store.Tests: projeto com testes unitários e testes de integração utilizando Xunit.

Exemplos importantes

  • No Customer.cs podemos observar na prática o uso do conceito de domínio rico. Nessa classe algumas propriedades (Name, Document e Email) que são comumente usadas apenas com tipos primitivos, nesse caso possuem Value Objects específicos para definir as regras que envolvem essas propriedades.

  • Dependency Injection (AddScoped, AddTransient e AddSingleton)

     // Add scoped: verifica se já existe na memória e usa o mesmo (por transação)
     services.AddScoped<StoreDataContext, StoreDataContext>(); 
     // Add Transient: instância sempre que a implementação foi chamada
     services.AddTransient<ICustomerRepository, CustomerRepository>(); 
     services.AddTransient<IEmailService, EmailService>();
     // Add Singleton: uma instância única do objeto para toda aplicação (não utilizado no projeto)
  • Exemplos de uso de cache:

    [HttpGet]
    [Route("v1/customers")]
    [ResponseCache(Duration = 15)] // Exemplo de cache de 15 minutos
    // [ResponseCache(Location = ResponseCacheLocation.Client ,Duration = 15)] // Exemplo de cache de 15 minutos armazenado ná máquina do cliente
    public IEnumerable<ListCustomerQueryResult> Get() => _repository.Get();
  • Trabalhando com diferentes ambientes usando o appsettings.json: no exemplo do projeto estamos usando dois ambientes (enviroments) production e development. Para trabalhar com esses dois ambientes foram criados dois arquivos de configurações separados:

    • appsettings.json: Arquivo padrão com as configurações de Production
    • appsettings.Development.json: Arquivo de ambiente alternativo com as configurações de Development
    • Para o funcionamento correto é necessário que exista um arquivo Properties/launchSettings.json com os diferentes ambientes configurados no profiles (no VS Code o arquivo .vscode/launch.json que tem os profiles configurados). Exemplo:
    "env": {
        "ASPNETCORE_ENVIRONMENT": "Development"
    }
    • No Startup.cs o trecho abaixo foi utilizado para configurar de qual appsettings as configurações serão buscadas:
    var builder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    
    Configuration = builder.Build();

    -Para mais detalhes verificar a documentação: https://docs.microsoft.com/pt-br/aspnet/core/fundamentals/environments?view=aspnetcore-5.0

Conceitos e ferramentas utilizadas

api_estudo's People

Contributors

wurthma avatar

Watchers

 avatar  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.