Skip to content

Latest commit

 

History

History
120 lines (85 loc) · 7.51 KB

File metadata and controls

120 lines (85 loc) · 7.51 KB

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