Skip to content

Commit 0fd78fc

Browse files
authored
Merge pull request #37 from futurum-dev/feature/readme-improvements
README.md improvements
2 parents aaf7913 + 24232d8 commit 0fd78fc

File tree

1 file changed

+68
-59
lines changed

1 file changed

+68
-59
lines changed

README.md

Lines changed: 68 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,30 @@ public partial class GreetingWebApiEndpoint
2929
```
3030

3131
## Key Features
32-
- [x] Structured way of building WebApiEndpoints using [minimal apis](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0)
33-
- [x] [Easy setup](#easy-setup)
34-
- [x] Full support and built on top of [minimal apis](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0)
35-
- [x] Full support for OpenApi
36-
- [x] Full support for Api Versioning
37-
- [x] Full support for [TypedResults](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-7.0)
38-
- [x] Support for configuring
39-
- [x] [Futurum.WebApiEndpoint.Micro](#configuring-futurumwebapiendpointmicro)
40-
- [x] [entire API](#configuring-the-entire-api)
41-
- [x] [specific API version](#configuring-a-specific-api-version)
42-
- [x] [individual WebApiEndpoint(s)](#webapiendpoint)
43-
- [x] individual REST method(s) - as per standard minimal apis
44-
- [x] [Supports uploading file(s) with additional JSON payload](#uploading-files-with-additional-json-payload)
45-
- [x] Built in [sandbox runner](#sandbox-runner) with full [TypedResults support](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-7.0), catching unhandled exceptions and returning a [ProblemDetails](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.problemdetails?view=aspnetcore-7.0) response
46-
- [x] Autodiscovery of WebApiEndpoint(s), based on Source Generators
47-
- [x] [Roslyn Analysers](#roslyn-analysers) to help build your WebApiEndpoint(s) and ensure best practices
48-
- [x] Enables Vertical Slice Architecture, giving you the ability to add new features without changing existing code
49-
- [x] Built on dotnet 8
50-
- [x] Built in use of [ProblemDetails](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.problemdetails?view=aspnetcore-7.0) support
51-
- [x] Built in [extendable GlobalExceptionHandler](#extendable-globalexceptionhandler)
52-
- [x] Developer friendly, with a simple API and with a full suite of samples and tests
53-
- [x] [Tested solution](https://coveralls.io/github/futurum-dev/dotnet.futurum.webapiendpoint.micro)
54-
- [x] [Comprehensive samples](#comprehensive-samples)
55-
- [x] [Convention Customisation](#convention-customisation)
32+
- Structured way of building WebApiEndpoints using [minimal apis](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0)
33+
- [Easy setup](#easy-setup)
34+
- Full support and built on top of [minimal apis](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis?view=aspnetcore-7.0)
35+
- Full support for OpenApi
36+
- Full support for Api Versioning
37+
- Full support for [TypedResults](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-7.0)
38+
- Support for configuring
39+
- [Futurum.WebApiEndpoint.Micro](#configuring-futurumwebapiendpointmicro)
40+
- [entire API](#1-configuring-the-entire-api)
41+
- [specific API version](#2-configuring-a-specific-api-version)
42+
- [individual WebApiEndpoint(s)](#how-to-create-a-webapiendpoint)
43+
- individual REST method(s) - as per standard minimal apis
44+
- [Supports uploading file(s) with additional JSON payload](#uploading-files-with-additional-json-payload)
45+
- Built in [sandbox runner](#sandbox-runner) with full [TypedResults support](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.typedresults?view=aspnetcore-7.0), catching unhandled exceptions and returning a [ProblemDetails](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.problemdetails?view=aspnetcore-7.0) response
46+
- Autodiscovery of WebApiEndpoint(s), based on Source Generators
47+
- [Roslyn Analysers](#roslyn-analysers) to help build your WebApiEndpoint(s) and ensure best practices
48+
- Enables Vertical Slice Architecture, giving you the ability to add new features without changing existing code
49+
- Built on dotnet 8
50+
- Built in use of [ProblemDetails](https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.problemdetails?view=aspnetcore-7.0) support
51+
- Built in [extendable GlobalExceptionHandler](#extendable-globalexceptionhandler)
52+
- Developer friendly, with a simple API and with a full suite of samples and tests
53+
- [Tested solution](https://coveralls.io/github/futurum-dev/dotnet.futurum.webapiendpoint.micro)
54+
- [Comprehensive samples](#comprehensive-samples)
55+
- [Convention Customisation](#convention-customisation)
5656

5757
## Table of Contents
5858
1. [What is a WebApiEndpoint?](#what-is-a-webapiendpoint)
@@ -63,7 +63,7 @@ public partial class GreetingWebApiEndpoint
6363
6. [Additional helper functions](#additional-helper-functions)
6464
7. [Comprehensive samples](#comprehensive-samples)
6565
8. [Convention Customisation](#convention-customisation)
66-
9. [Extendable GlobalExceptionHandler](#extenable-globalexceptionhandler)
66+
9. [Extendable GlobalExceptionHandler](#extendable-globalexceptionhandler)
6767
10. [Tips & Tricks](#tips--tricks)
6868
11. [Troubleshooting](#troubleshooting)
6969
12. [Roslyn Analysers](#roslyn-analysers)
@@ -76,8 +76,8 @@ public partial class GreetingWebApiEndpoint
7676
## Easy setup
7777
Check out this section for a step-by-step guide to setting up the library for use in your development environment.
7878

79-
- [x] Add the [NuGet package](https://www.nuget.org/packages/futurum.webapiendpoint.micro) ( futurum.webapiendpoint.micro ) to your project
80-
- [x] Update *program.cs* as per [here](#example-programcs)
79+
- Add the [NuGet package](https://www.nuget.org/packages/futurum.webapiendpoint.micro) ( futurum.webapiendpoint.micro ) to your project
80+
- Update *program.cs* as per [here](#example-programcs)
8181

8282
### Example program.cs
8383
Here's an example of how to update your *program.cs* file:
@@ -138,9 +138,9 @@ app.UseWebApiEndpointsOpenApi();
138138
You can *map* your minimal apis for this WebApiEndpoint in the *Build* method.
139139

140140
The *IEndpointRouteBuilder* that the *Build* method receives has already:
141-
- been configured with [configuring for the entire API](#configuring-the-entire-api)
141+
- been configured with [configuring for the entire API](#1-configuring-the-entire-api)
142142
- been configured with the API versioning
143-
- been configured with [configuring a specific API version](#configuring-a-specific-api-version)
143+
- been configured with [configuring a specific API version](#2-configuring-a-specific-api-version)
144144
- been configured with the route prefix and tag
145145
- been through the *optional* *[Configure](#configure)* method in the same class
146146

@@ -257,10 +257,10 @@ The configuration is applied in the following order:
257257
```mermaid
258258
flowchart TB
259259
classDef blackText stroke:#000,color:#000;
260-
entire-api[Entire API] -->|1| specific-version-api[Specific Version API]
261-
specific-version-api -->|2| endpoint-configure[Web API Endpoint 'Configure' Method]
262-
endpoint-configure -->|3| endpoint-build[Web API Endpoint 'Build' Method]
263-
endpoint-build -->|4| minimal-api[Individual Minimal API]
260+
entire-api[1. Entire API] --> specific-version-api[2. Specific Version API]
261+
specific-version-api --> endpoint-configure[3. WebApiEndpoint 'Configure' Method]
262+
endpoint-configure --> endpoint-build[4. WebApiEndpoint 'Build' Method]
263+
endpoint-build --> minimal-api[5. Individual Minimal API]
264264
265265
style entire-api fill:#f9d0c4
266266
style specific-version-api fill:#fcbf49
@@ -271,7 +271,7 @@ flowchart TB
271271
class entire-api,specific-version-api,endpoint-configure,endpoint-build,minimal-api blackText
272272
```
273273

274-
### Configuring the entire API
274+
### 1. Configuring the entire API
275275
The entire API can be configured to set global parameters. This is an ideal place to set configurations such as:
276276
- Global route prefix: This is a common prefix for all routes in your API.
277277
- Global authorization: This is where you can set the authorization required for all endpoints in your API. Remember to use the AllowAnonymous attribute on individual WebApiEndpoints that should not be secured, such as a Login endpoint.
@@ -297,7 +297,7 @@ public class GlobalWebApiEndpoint : IGlobalWebApiEndpoint
297297
```
298298
**See *[GlobalWebApiEndpoint](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/GlobalWebApiEndpoint.cs)* in sample project**
299299

300-
### Configuring a specific API version
300+
### 2. Configuring a specific API version
301301
In the context of API development, it's often necessary to configure specific API versions. This configuration can include aspects such as:
302302
- Authorization specific to the API version: This is where you can set the authorization required for all endpoints in a specific API version. Don't forget to use the AllowAnonymous attribute on individual WebApiEndpoints that should not be secured, such as a Login endpoint.
303303

@@ -328,6 +328,15 @@ public class WebApiVersionEndpoint3_0a : IWebApiVersionEndpoint
328328

329329
**Remember, the configuration of specific API versions is a crucial aspect of maintaining and managing your APIs, especially when dealing with different versions of the same API. It allows you to control the behavior of each version independently, providing flexibility and control over your API's functionality.**
330330

331+
### 3. WebApiEndpoint 'Configure' Method
332+
See [here](#configure)
333+
334+
### 4. WebApiEndpoint 'Build' Method
335+
See [here](#build).
336+
337+
### 5. Individual Minimal API
338+
See [here](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis/overview?view=aspnetcore-8.0).
339+
331340
## Sandbox runner
332341
The Sandbox Runner is a feature that provides a set of comprehensive extension methods to execute your code in a controlled environment or "sandbox".
333342

@@ -540,23 +549,23 @@ ToAccepted<T>("/api/articles")
540549

541550
## Comprehensive samples
542551
There are examples showing the following:
543-
- [x] A basic blog CRUD implementation - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Blog/BlogWebApiEndpoint.cs)
544-
- [x] The *ToDo* sample from Damian Edwards [here](https://github.com/DamianEdwards/TrimmedTodo) - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Todo/TodoApiWebApiEndpoint.cs)
545-
- [x] AsyncEnumerable - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/AsyncEnumerableWebApiEndpoint.cs)
546-
- [x] Bytes file download - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/BytesWebApiEndpoint.cs)
547-
- [x] EndpointFilter on a specific WebApiEndpoint - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/EndpointFilterWebApiEndpoint.cs)
548-
- [x] Exception handling - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/ErrorWebApiEndpoint.cs)
549-
- [x] File(s) upload - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
550-
- [x] File(s) upload with Payload - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
551-
- [x] File download - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
552-
- [x] OpenApi versioning - [link v0](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV0WebApiEndpoint.cs), [link v1, v1.20-beta, v3, v4-alpha](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV1WebApiEndpoint.cs), [link v2](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV2WebApiEndpoint.cs)
553-
- [x] Output Caching - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/OutputCachingWebApiEndpoint.cs)
554-
- [x] Rate Limiting - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/RateLimitingWebApiEndpoint.cs)
555-
- [x] [Security](#security-example) with a basic JWT example on a specific WebApiEndpoint - [login link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Security/SecurityLoginWebApiEndpoint.cs), [protected link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Security/SecurityProtectedWebApiEndpoint.cs)
556-
- [x] Weather Forecast - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/WeatherForecast/WeatherWebApiEndpoint.cs)
557-
- [x] Addition project containing WebApiEndpoints - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample.Addition/AdditionWebApiEndpoint.cs)
558-
- [x] Configuring setting for entire API - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/GlobalWebApiEndpoint.cs)
559-
- [x] Configuring setting for specific API version - [link v3, v1.20-beta](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/WebApiVersionEndpoint3_0.cs)
552+
- A basic blog CRUD implementation - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Blog/BlogWebApiEndpoint.cs)
553+
- The *ToDo* sample from Damian Edwards [here](https://github.com/DamianEdwards/TrimmedTodo) - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Todo/TodoApiWebApiEndpoint.cs)
554+
- AsyncEnumerable - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/AsyncEnumerableWebApiEndpoint.cs)
555+
- Bytes file download - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/BytesWebApiEndpoint.cs)
556+
- EndpointFilter on a specific WebApiEndpoint - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/EndpointFilterWebApiEndpoint.cs)
557+
- Exception handling - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/ErrorWebApiEndpoint.cs)
558+
- File(s) upload - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
559+
- File(s) upload with Payload - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
560+
- File download - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/FileWebApiEndpoint.cs)
561+
- OpenApi versioning - [link v0](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV0WebApiEndpoint.cs), [link v1, v1.20-beta, v3, v4-alpha](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV1WebApiEndpoint.cs), [link v2](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV2WebApiEndpoint.cs)
562+
- Output Caching - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/OutputCachingWebApiEndpoint.cs)
563+
- Rate Limiting - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Features/RateLimitingWebApiEndpoint.cs)
564+
- [Security](#security-example) with a basic JWT example on a specific WebApiEndpoint - [login link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Security/SecurityLoginWebApiEndpoint.cs), [protected link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/Security/SecurityProtectedWebApiEndpoint.cs)
565+
- Weather Forecast - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/WeatherForecast/WeatherWebApiEndpoint.cs)
566+
- Addition project containing WebApiEndpoints - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample.Addition/AdditionWebApiEndpoint.cs)
567+
- Configuring setting for entire API - [link](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/GlobalWebApiEndpoint.cs)
568+
- Configuring setting for specific API version - [link v3, v1.20-beta](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/WebApiVersionEndpoint3_0.cs)
560569

561570
![Comprehensive samples](https://raw.githubusercontent.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/main/docs/Futurum.WebApiEndpoint.Micro.Sample-openapi.png)
562571

@@ -565,11 +574,11 @@ How to use in Swagger UI:
565574
1. Run the Sample project
566575
2. In the Swagger UI, go to the 'Security' 'Login' endpoint
567576
3. Set the following
568-
Username = user1
569-
Password = password1
570-
SetPermissions = true
571-
SetClaim = true
572-
SetRole = true
577+
- Username = user1
578+
- Password = password1
579+
- SetPermissions = true
580+
- SetClaim = true
581+
- SetRole = true
573582
4. Copy the value returned without double quotes.
574583
5. Go to the 'Security' 'Protected' endpoint
575584
6. Click on the padlock
@@ -707,8 +716,8 @@ public partial class OpenApiVersionV1WebApiEndpoint
707716
**See *[OpenApiVersionV1WebApiEndpoint.cs](https://github.com/futurum-dev/dotnet.futurum.webapiendpoint.micro/blob/main/sample/Futurum.WebApiEndpoint.Micro.Sample/OpenApi/OpenApiVersionV1WebApiEndpoint.cs)* in sample project**
708717
709718
## Troubleshooting
710-
### *No operations defined in spec!*
711-
If you see this error in the SwaggerUI - No operations defined in spec! - then it means you haven't added any WebApiEndpoint projects. You need to do this for each project, including the project that contains the *program.cs* file. See [this](#addwebapiendpointsfor-per-project-containing-webapiendpoints) section for more details.
719+
### No operations defined in spec!
720+
If you see this error in the SwaggerUI - *No operations defined in spec!* - then it means you haven't added any WebApiEndpoint projects. You need to do this for each project, including the project that contains the *program.cs* file. See [this](#addwebapiendpointsfor-per-project-containing-webapiendpoints) section for more details.
712721

713722
### If there are Rest Api's that are not being picked up
714723
If there are Rest Api's that are not being picked up, then it means you haven't added a WebApiEndpoint projects. You need to do this for each project, including the project that contains the *program.cs* file. See [this](#addwebapiendpointsfor-per-project-containing-webapiendpoints) section for more details.

0 commit comments

Comments
 (0)