From d33ee0bc93077a8999b4f025e31f470c84fba2a1 Mon Sep 17 00:00:00 2001 From: Jon Galloway Date: Fri, 24 Jun 2022 16:14:43 -0700 Subject: [PATCH] Add Minimal APIs content --- 4-minimal-api/README.md | 251 +++++++++++++++++++++++++++++++++ 4-minimal-api/swagger-crud.png | Bin 0 -> 40546 bytes 4-minimal-api/swagger.png | Bin 0 -> 21682 bytes 3 files changed, 251 insertions(+) create mode 100644 4-minimal-api/README.md create mode 100644 4-minimal-api/swagger-crud.png create mode 100644 4-minimal-api/swagger.png diff --git a/4-minimal-api/README.md b/4-minimal-api/README.md new file mode 100644 index 0000000..5c8a528 --- /dev/null +++ b/4-minimal-api/README.md @@ -0,0 +1,251 @@ +# Build an HTTP backend with Minimal APIs + +## What is an HTTP API? + +Web servers are often used to serve web pages, but they can also be used to serve other types of data. For example, a web server can be used to provide data for other clients, such as a mobile app, a desktop app, another web server. Sometimes, we'll use front-end single page applications (SPAs) like Angular or React in the browser, but they'll interact with data on the server behind the scenes. Services like these are "Application Programming Interfaces" (APIs), rather than user interfaces like web browsers. + +### HTTP: the instruction set for web APIs + +Suppose the server has a list of pizzas that you want to interact with from your client program. There are some really common things you’ll want to do with a list of data (pizzas in this case) as a programmer: + +- Get a list of all the pizzas +- Get the details about one pizza +- Add a new pizza to the list +- Update the details for a pizza +- Remove a pizza from the list + +Because these things are so common, the web was designed with standard commands to handle them: GET, PUT, POST, and DELETE. These are part of the HTTP (short for HyperText Transport Protocol) specification, so anyone building a browser or server knows what to expect. Programmers build APIs for all kinds of things, from operating systems to smart watches to refrigerators, so we often talk about web focused APIs as HTTP APIs. + +### Serialization data with JSON + +To avoid reinventing things over and over, we use some common standards for HTTP APIs. We’ve already talked about HTTP, which handles the commands and communication between clients and servers. Another important thing for HTTP APIs to do in a predictable way is to send data back and forth. The most common way to package up data now is called JSON, short for JavaScript Object Notation. It’s a neat, simple format for packaging up data, but programmers don’t want to spend time converting their information back and forth between properties and classes in their programming language and JSON. This conversion process is called serialization, and fortunately ASP.NET Core can do that for you automatically. + +### Welcome to the internet... + +Another important thing to think about for server exposed to the public internet is security and authorization. Some HTTP APIs require authentication, so only clients with the right credentials can access them. Even public HTTP APIs need to handle security, to manage things like denial of service attacks and exploiting the public APIs to take over the server or get access to information they shouldn’t have. Fortunately, ASP.NET Core can handle things like this for us, too. + +## Keep it simple with Minimal APIs + +By now, you might be thinking that building an API that speaks HTTP, serializes JSON, manages security, etc., is going to be really hard! Fortunately, ASP.NET Core has a really easy way to get started, called Minimal APIs. Believe it or not, this is all you need to build a basic Minimal API: + +```csharp +var builder = WebApplication.CreateBuilder(args); +var app = builder.Build(); +app.MapGet("/", () => "Hello World!"); +app.Run(); +``` + +The first two lines set up the server, the third line returns some information (in this case “Hello World!”), and the fourth line runs it. That third line is called an endpoint, and it just says that whenever a client sends a GET command to our server, it will run some code. We have similar commands for all the other HTTP verbs, so creating a new Pizza on the server would look like this: + +```csharp +app.MapPost("/pizzas", (Pizza pizza) => PizzaDB.CreatePizza(pizza)); +``` + +This endpoint accepts a pizza JSON object, turns it into C#, and passes it to a PizzaDB class to save it to a database. + +## Building a Minimal API + +### Create a new Minimal API project + +First, you need to scaffold a project. You've installed .NET 6 and you're ready to go. + +1. Create a web API by running `dotnet new`: + + ```bash + dotnet new web -o PizzaStore + ``` + + You should see the _PizzaStore_ directory. + +1. Run the app by calling `dotnet run`. It builds the app and hosts it on a port from 5000 to 5300. HTTPS has a port selected for it in the range of 7000 to 7300. + + ```bash + dotnet run + ``` + + Here's what the output can look like in the terminal: + + ```output + Building... + info: Microsoft.Hosting.Lifetime[14] + Now listening on: https://localhost:7200 + info: Microsoft.Hosting.Lifetime[14] + Now listening on: http://localhost:5100 + info: Microsoft.Hosting.Lifetime[0] + Application started. Press Ctrl+C to shut down. + info: Microsoft.Hosting.Lifetime[0] + Hosting environment: Development + info: Microsoft.Hosting.Lifetime[0] + Content root path: //PizzaStore + ``` + +1. In your browser, go to the indicated port. According to the terminal `http://localhost:{PORT}`, you should see the text "Hello World!" + +Congratulations! You've created an API by using a minimal API template. + +## Add automatic API documentation with Swagger + +Use Swagger to ensure that you have a self-documenting API, where the docs change when you change the code. This also builds a really convenient web interface for your API, so you can test out the application as you build it. + +1. Install the *Swashbuckle* package: + + ```bash + dotnet add package Swashbuckle.AspNetCore + ``` + +1. Next, configure your project to use Swagger. Open _Program.cs_ and add replace it with the following code: + + ```csharp + using Microsoft.OpenApi.Models; + + var builder = WebApplication.CreateBuilder(args); + + builder.Services.AddEndpointsApiExplorer(); + builder.Services.AddSwaggerGen(c => + { + c.SwaggerDoc("v1", new OpenApiInfo { Title = "PizzaStore API", Description = "Making the Pizzas you love", Version = "v1" }); + }); + + var app = builder.Build(); + + if (app.Environment.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseSwagger(); + app.UseSwaggerUI(c => + { + c.SwaggerEndpoint("/swagger/v1/swagger.json", "PizzaStore API V1"); + }); + + app.MapGet("/", () => "Hello World!"); + + app.Run(); + ``` + + This is actually just adding a few lines of code: + + - The `using` statement at the top makes it easier to use the *Swashbuckle* package without having to type out long namespaces for the commands. + - The two `builder.Services.Add` lines add the two services that *Swashbuckle* needs to generate the documentation. + - The `UseSwagger` and `UseSwaggerUI` lines add the Swagger and Swagger UI endpoints. + +1. Rerun the project and go to the app's address, `http://localhost:{PORT}/swagger`. + + You should see the following output: + + ![Swagger](swagger.png) + +### Add a Pizza model and service + +First you need some data. To store and manage data, you'll use an in-memory store. For this example, we're just going to use a simple list of pizzas. Don't worry too much about this pizza service, it's just a quick example that holds a list of pizzas so we our API has some data to work with. + +1. Create the file _Db.cs_ and give it the following content: + + ```csharp + namespace PizzaStore.DB; + + public record Pizza + { + public int Id {get; set;} + public string ? Name { get; set; } + } + + public class PizzaDB + { + private static List _pizzas = new List() + { + new Pizza{ Id=1, Name="Cheese" }, + new Pizza{ Id=2, Name="Pepperoni" }, + new Pizza{ Id=3, Name="Pineapple extravaganza"} + }; + + public static List GetPizzas() + { + return _pizzas; + } + + public static Pizza ? GetPizza(int id) + { + return _pizzas.SingleOrDefault(pizza => pizza.Id == id); + } + + public static Pizza CreatePizza(Pizza pizza) + { + _pizzas.Add(pizza); + return pizza; + } + + public static Pizza UpdatePizza(Pizza update) + { + _pizzas = _pizzas.Select(pizza => + { + if (pizza.Id == update.Id) + { + pizza.Name = update.Name; + } + return pizza; + }).ToList(); + return update; + } + + public static void RemovePizza(int id) + { + _pizzas = _pizzas.FindAll(pizza => pizza.Id == id).ToList(); + } + } + ``` + +Now that you have your data store, let's have the API use it next. + +### Connect data to routes + +To connect your in-memory store to the API: + +1. **Add the namespace.** This addition is as simple as adding the proper `using` statement. +1. **Set up the routes.** Make sure you add all the route mappings that are needed to create, read, update, and delete. +1. **Invoke it in the routes.** Finally, you need to call the in-memory store per each route and pass in any parameters or body from the request, if applicable. + +Now, connect data in your API. + +1. At the top of the _Program.cs_ file, add the following line of code: + + ```csharp + using PizzaStore.DB; + ``` + +1. Just before `app.Run()`, add the following code: + + ```csharp + app.MapGet("/pizzas/{id}", (int id) => PizzaDB.GetPizza(id)); + app.MapGet("/pizzas", () => PizzaDB.GetPizzas()); + app.MapPost("/pizzas", (Pizza pizza) => PizzaDB.CreatePizza(pizza)); + app.MapPut("/pizzas", (Pizza pizza) => PizzaDB.UpdatePizza(pizza)); + app.MapDelete("/pizzas/{id}", (int id) => PizzaDB.RemovePizza(id)); + ``` + + This is the actual API part of the application! As you can see, there's not a lot of code. We're just mapping the routes to code that calls into our in-memory store. + +1. Run the app by using `dotnet run`: + + ```bash + dotnet run + ``` + +1. In your browser, go to `http://localhost:{PORT}/swagger`. + + You should see the following page rendering: + + ![Swagger](swagger-crud.png) + + What's great about this Swagger UI is that you can use it to test out the API. Click on any of the API endpoints to expand it, and click the `Try it out` button. You'll see a form that makes it easy to try submitting requests to the API and seeing the response. + +## What's next? + +This is a quick first look at building a backend with Minimal APIs. To go through this same example in more detail, and with more explanation, check out the [Minimal API learning path on Microsoft Learn](https://docs.microsoft.com/learn/paths/aspnet-core-minimal-api/)! + +In the next lesson, you'll learn about building a game with Blazor! Stay tuned! + +## Connect with us + +We're excited to support you on your learning journey! Check out the [.NET Community Page](https://dotnet.microsoft.com/platform/community) to find links to our blogs, YouTube, Twitter, and more. diff --git a/4-minimal-api/swagger-crud.png b/4-minimal-api/swagger-crud.png new file mode 100644 index 0000000000000000000000000000000000000000..44248fcbb65c629d0c33b25efc7be1596239d0ca GIT binary patch literal 40546 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 literal 0 HcmV?d00001 diff --git a/4-minimal-api/swagger.png b/4-minimal-api/swagger.png new file mode 100644 index 0000000000000000000000000000000000000000..ef91d28b1cc6b74abd2580f6c67d8b3181ebdbd6 GIT binary patch literal 21682 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 z zl5p_NrGml!{vy!*nu?-_ZRDetjPiC1#{2i4@9vL>Yyr2Re9$BdO2?gQ|n(gHmvPpx1!Gm(8rRm+VjzBjLh`iR^nB!dI|vdD_KKB$s!|nny8?zsMymD!D@VI}hs<|ZAL<=0;v9EWc7u{1^5Y%OPIp(o z8`1kf3ag=zvsVWz5t|gkj8-TLf;Y&{WrNXFlqBT|hs{yijTj9`QLDGOKWrSOWTdCV z(wi|KQH=H#7e0~rP*+XU7+f^F0oy_lkxN4Gur*kp#lj~^GkA6wFMc2lmhDr7Hu^7ieYG{CycdZHfa~ryo|`}qnVKH-oVvN`{Fbt z7I0{@-2Am*G+lyIpLhTu2x7=aVM7S-D-a6K~m?uxd4DU(1X zSh>{PJ_u^JH*Q1&DHxcIZS?6aKA6eRWvXb*%vB#&tI_w{MMVo5ehMrMy|_?An<424pS%z5Y`oV2)(FM{7&#S#yT<{b&F+ z2HvC3PRC$s$4M~5;h>{)DSiC}23^vEILUlVXqhnqlGl*j?ARtzc{PK+3-o-ie4+@%09r+6H&PbtXF=e4Qf%4)psrJoUzlA1S4#JIBM472{F zW}>|XAG-FSi*;fkI>>mxR~zPnZuQ65XGN%E&SdR17V5~XJ#DzKB0k9HMb~j-r4{$- zT=6*MW>@_5{Id1x2foWi`@w{P)6U^nfZ%H1fjn{lOxy+;X$$sSm!3}y!liLOTmC+Q zw>12?#uj1cP0OCM!}X+4Ca{aLvU0ct^Shio=%cq#96I@KRmd?QDN)T1*hg=~a36N& z1N|nBMpRfjx3c0ILfFF=a~sr4esR_C=piY1^2UX(VnbN#^-p~ckves!n>+Bc#TBmD zGE)@tbnuMPEEK-v2Bc1Ty4u69>FVi%h{q6~`01K0hO% zmm$F*i*J`lNkwA2n31x0j4)p*Dw`Ly2G=Sh@SnBZ4EEA6%iF7~;q}DhG#Hqer~&7v zJ~T<#vnxEhkc^`6kKUIM?dsb;s$a|k+^fUTNbPkM()mQyBT37|36B@+Vm2w9OAa)E zR{5lE3^A)2KfMPgKxsp*`B@y%q=;{WR7%z>zu!*_krEuRIrYOOGP(mdt0R-})NKSB zw!AJeCC8x2!1Ke2trFFY2J4kiZ0#8p(drix*hU0%lo%+i89Sg)Lz;P>^L%dtxR?!K zaLjb5UfD001P*!TU@mkWFT?}62(4yc`(9~9X7DN9JArlqj@cDp@+);zgu92hjv_C^ zrO^DFB@98OooH)7>UKT0rReiRNx|gCx5J3s>d;kV;ovKQ>vTQ08| jxRxy&!LE1 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 I=akR{0DOW}EC2ui literal 0 HcmV?d00001