GithubHelp home page GithubHelp logo

structuredminimalapi's Introduction

Structured Minimal API

An example on how to structure a minmal API using Vertical Slice Architecture

Video Walkthrough

Prefer watching videos rather than reading the code? Check this video out, it's a walkthrough of the solution and explains some concepts / reasoning

What is Vertical Slice Architecture?

Vertical slice architecture is an approach for organising your code into features/vertical slices rather than organising by technical conerns (e.g. Controllers, Models, Services etc). Each slice will contain all the code which fullfills a feature or use case inside the application. One of the main benefits of VSA is the ability to structure each feature/slice independently, so each feature/slice can be as simple or complicated as it needs to be.

What does this API do?

This is an API for Twitter/X like social media, where users can make text posts, like and comment on posts and follow other users.

Some Important Design Decisions In This Project

  1. Each endpoint will define their own request/response contract
    • I have found trying to resuse DTOs can be a pain as soon as an edge case requires the DTO to diverge from the common structure. Rather than dealing with that pain later, bite the bullet now and create a seperate request/response DTO.
  2. Let DATA BE DATA
    • I'm not using Domain Driven Design, after using DDD on real world projects, I personally, don't like the approach (if it works for you, keep doing it, don't let me change that), I found I was always trying to search for the code that was actually doing the thing, or trying to figure out which Domain object the code belongs too rather than writing the code.
    • After experimenting with Golang I really like the approach of letting data just be simple structs and using methods/functions to operate over them.
    • So, in this project our Data Types will just be simple data buckets, no logic inside them, they are just there to represent our data. Some people call this an Anemic Domain Model
  3. No IRepository abstraction over EF Core
    • Controversial, I know. My take is EF Core is already a pretty solid abstraction over a database and covers 99.9% of use cases. Some people say "What about unit testing?", I think you shouldn't be mocking YOUR OWN database, if you need to test something which is reading/writing to your database, you should be writing an integration test
    • If EF Core isn't suitable for a specific feature/slice, we can use anything we want (e.g. Dapper) as each feature/slice is independent.

structuredminimalapi's People

Contributors

jonowilliams26 avatar

Stargazers

Craig Vincent avatar Abhiram Nagadi avatar Andrei Sumilang avatar  avatar Raul Ryan Deaque Silva avatar Christian Metz avatar Nikolay Dobrovolskiy avatar Alex avatar  avatar Emanuele Latino avatar R2 avatar Daimler avatar André Júnior avatar Sander Constantin avatar Rahiyan Safin avatar  avatar Peder avatar Petar Stojkovski avatar Pham Le Thanh Vu avatar Kei avatar  avatar Duke avatar David Samuelsen avatar Bruno Maluche Neto avatar Matthew Winder avatar Artur Nowak avatar Maximilian Stümpfl avatar Shaun Chong avatar Vittor avatar Arash Farahmandi avatar Sann Lynn Htun avatar Marius Wallin avatar  avatar Janusz Jasinski avatar Leandro Hiroshi avatar  avatar Justin Adler avatar Egemen Akdan avatar  avatar Kai avatar Mircea Radu Vlad avatar Maxx avatar Marco Talento avatar Brad avatar  avatar  avatar Kline Moralee avatar  avatar  avatar Mauricio Rohling avatar eric.fitskie@olyslager.com avatar  avatar Chen avatar Julian Segura avatar  avatar Carl Ed avatar  avatar Brandon Foss avatar Domn Werner avatar Billy Mumby avatar Samed Skulj avatar  avatar Burak KIRBAĞ avatar Raymond avatar Gustavo Gomes avatar John Gerwin De las Alas avatar Andres Pérez avatar Lan avatar Shaun Tabone avatar  avatar Eldar Zeynalov avatar Hesham ElWardany avatar walapa avatar Thomas G. Johansen avatar Mirco Benthien avatar Murat MERCAN avatar  avatar Abou  avatar Stephan Kieburg avatar david0 avatar  avatar Thomas Darimont avatar Joaquim Sancha avatar Gordon Kenaston avatar Jeff West avatar  avatar  avatar  avatar Gustaf Lindholm avatar  avatar  avatar Johannes-Max Sorge avatar Emmanuel Ramírez Fricá avatar well.james avatar Andrii avatar Karnz avatar Jeremy Knight avatar Chris Milko avatar Jon Samwell avatar Simon McKenna avatar

Watchers

Lucian avatar  avatar eric.fitskie@olyslager.com avatar  avatar

structuredminimalapi's Issues

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.