Skip to content

Wissance/WebApiToolkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

315 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wissance.WebApiToolkit

Awesome GitHub code size in bytes GitHub issues GitHub Release Date Wissance.WebApiToolkit CI

  • Prev Version <= 3.0.0 Nuget Downloads
  • Core Nuget Downloads
  • Ef extensions NugetDownloads
  • Cloud AWS S3 utils NugetDownloads

WebApiToolkit helps to build application easily

One Line of code for Fully functional CRUD Controller with Swagger doc

1 line to add controller

Why Wissance.WebApiToolkit

Without With Wissance.WebApiToolkit
⛔ Manual support for the API uniformity ✅ Output of all REST methods is standardize
⛔ Every Controller requires at least 20 min to be written ✅ Up to one line of code for fully functional CRUD
⛔ Inconsistent error response ✅ Unified error format out of the box
⛔ Requires to rewrite controllers to add a new
technology
✅ Requires only a new Manager class
⛔ Not supporting bulk operation by default ✅ Up to one line of code for fully functional BULK API
⛔ Controller logic can't be easily used for
gRPC or SignalR
✅ You could have the same Manager to
handle REST, gRPC,and a SignalR simultaneously
⛔ Paging and Sorting should be written for
every controller separately
✅ Paging and sorting are implemented
out of the box in the uniform manner
⛔ Controller method can't be easily switched on/off ✅ It is possible to use some of CRUD or BULK CRUD methods easily (switch them off and back on from routing and API Explorer)

Minimal example

For the full doc see the 📚 project wiki, to add in one line, for example i break it to Assembly get and add Controller, i.e.:

  1. Generate assembly:
Assembly stationControllerAssembly = services.AddSimplifiedAutoController<StationEntity, Guid, EmptyAdditionalFilters>(
                provider.GetRequiredService<ModelContext>(), "Station",
                ControllerType.FullCrud, null, provider.GetRequiredService<ILoggerFactory>());
  1. Add Controller from assembly:
services.AddControllers().AddApplicationPart(stationControllerAssembly).AddControllersAsServices();

Key Features

  • 🔥 REST API Controller with full CRUD contains only 20 lines of code (~ 10 are imports)

    • GET methods have built-in paging support;
    • GET methods have built-in sorting and filter by query parameters;
  • 🚀 BULK operations with objects (Bulk Create, Update and Delete) on a Controller && interface level

  • 🧠 support to work with any persistent storage (IModelManager interface); Good built-in EntityFramework support (see EfModelManager class). See WeatherControl App which has

  • 🎨 Manager classes that support file operation over:

    • web folders (folders from mounted devices or just local folders)
    • S3 AWS-compatible (tested with Yandex Object Storage and previously with Cloudflare R2 and Amazon S3)
  • 🆒 Bulk vs 🙅‍♂️ Non-Bulk, Wissance.WebApiToolkit has Bulk out of the box:

  • 🛠️ it is possibly to switch some or even all default CRUD or BULK methods from controller by setting AllowedOperation attribute see the docs

Bulk vs Non Bulk

  • 😱 Elapsed time in Non-Bulk REST API with EF is ~976 ms.
  • 🔥 Elapsed time in Bulk API with EF is ~4 ms.

✨ Result : Bulk API is almost ~250 x faster!

Additional materials (Post, articles, video)

You could see our articles about Toolkit usage:

Versions History (Releases)

Versions 1.0.0 - 3.0.0

  • Created base controllers for ReadOnly (get many, get one) and FullCRUD (ReadOnly + Create + Update + Delete) operations.
  • Created base controllers for CRUD BULK operation (~/api/bulk) .
  • Created a common interface for passing paging and sorting.
  • Added support for controllers creation with EntityFramework as a DB technology.
  • Supported API Explorations with show all query parameters in swagger.
  • Supported the creation of gRPC services based on IModelManager.

Version 4.0.0 - 4.x.x

  • WebAPIToolkit project was separated on WebAPIToolkit.Core with interface parts only, and this part is independent from database techology.
  • Added support for operation with files, either a local or network holder or S3 AWS Compatible Cloud Storage.

Version 4.x.x is active to support important features for outdated .Net plafrorms (.netcoreapp3.1 and .net5.0)

Version 5.0.0

  • Removed support of .netcoreapp3.1 and .net5.0
  • Added support for the net9.0
  • Updated package version to keep net6.0

Version 5.1.0

  • Generation tools development and it is possible to create Controllers dynamically with up to 1 line of code

Version 5.2.0

  • GitHub actions for CI (Build +test run)
  • Added an additional method for 1-line controller add that has a factory func, to return a different result from methods
  • Create && Update factory methods are having now DbContext for proper working with many-2-many by default

Version 5.3.0

  • Added ability to easily switch off by attribute from routing any methods of base controllers

Contributors

About

WebApi toolset that allows you to make CRUD REST APIs with one line of code and to create gRPC and SignalR from reusable components too

Topics

Resources

License

Stars

156 stars

Watchers

9 watching

Forks

Packages

 
 
 

Contributors

Languages