ASP.NET Core Web API Deep Dive
This course will teach you how to build a truly RESTful API, using deep-dive ASP.NET Core 8 concepts.
What you'll learn
In this course, ASP.NET Core Web API Deep Dive, we will teach you how to build a truly RESTful API, using deep-dive ASP.NET Core concepts. Creating that is different from creating a regular web API.
First, you'll explore how to interact with your API using the correct HTTP methods and status codes, and what method safety and idempotency are all about.
Next, you'll learn how to validate input that’s sent to the API, and how to implement common features like filtering, searching, paging, sorting and data shaping.
Finally, you'll learn about HATEOAS and other different approaches to caching and dealing with concurrency.
By the end of this course, you’ll know all about REST constraints, what the advantages are, and how to implement them when building your API with ASP.NET Core 8.
Table of contents
- Coming Up 3m
- Course Prerequisites 1m
- Frameworks and Tooling 2m
- Positioning ASP.NET Core MVC for Building RESTful APIs 4m
- Demo: Introducing the Starter Project 7m
- Demo: Using Postman and Importing the Example Request Collection 3m
- Introducing the REST Architectural Style 7m
- Learning What the REST Constraints Are About 19m
- The Richardson Maturity Model 5m
- Summary 2m
- Coming Up 1m
- Designing the Outer Facing Contract 8m
- Revisiting Routing 3m
- Demo: Adhering to URI Guidelines 8m
- Learning Why Status Codes Are Important 7m
- Demo: Returning Correct Status Codes 8m
- Errors, Faults and API Availability 1m
- Demo: Handling Faults and Avoiding Exposing Implementation Details 5m
- Working With Content Negotiation and Formatters 5m
- Demo: Supporting XML 5m
- Outer Facing Model vs. Entity Model 3m
- Supporting HEAD 1m
- Demo: Supporting HEAD 2m
- Summary 4m
- Coming Up 2m
- Method Safety and Method Idempotency 3m
- Demo: Inspecting and Fixing the POST Methods 12m
- The Advantages of Applying the ApiController Attribute 5m
- Demo: Creating Child Resources Together with a Parent Resource 5m
- Demo: Creating a Collection of Resources 6m
- Demo: Working with Array Keys and Composite Keys 10m
- Demo: Handling POST to a Single Resource 2m
- Full Updates (PUT) Versus Partial Updates (PATCH) 7m
- Demo: Inspecting a PUT Action 4m
- Demo: Supporting Partial Updates with PATCH 12m
- Using PUT or PATCH for Creating Resources: Upserting 4m
- Demo: Upserting with PUT 5m
- Demo: Upserting with PATCH 3m
- Considering Destructive Actions 3m
- Demo: Supporting OPTIONS 5m
- Demo: Inspecting Input Formatters 3m
- HTTP Method Overview by Use Case 5m
- Summary 3m
- Coming Up 1m
- Validation in a RESTful World 5m
- Demo: Validating Input With Data Annotations 8m
- Validation and the ApiController Attribute 1m
- Demo: Customizing Error Messages 1m
- Reporting Validation Errors 3m
- Demo: Customizing Validation Error Responses 4m
- Demo: Validating Input when Updating a Resource with PUT 8m
- Demo: Class-level Input Validation with IValidatableObject 5m
- Demo: Class-level Input Validation with a Custom Attribute 4m
- Demo: Validating Input when Updating a Resource with PATCH 5m
- Demo: Returning ValidationProblems from Controller Actions 2m
- Demo: Validating Input when Upserting With PATCH 1m
- Other Approaches: FluentValidation 1m
- Summary 2m
- Coming Up 1m
- Sorting Collection Resources 3m
- Demo: Sorting Collection Resources 6m
- Creating a Property Mapping Service 3m
- Demo: Creating a Property Mapping Service 6m
- Demo: Creating a Reusable ApplySort Method 7m
- Demo: Adding OrderBy Clauses to Pagination Links 2m
- Demo: Taking Consumer Errors into Account when Sorting 4m
- Summary 1m
- Coming Up 1m
- Hypermedia as the Engine of Application State 11m
- Demo Introduction: Supporting HATEOAS 2m
- Demo: Implementing HATEOAS Support for a Single Resource 6m
- Demo: Implementing HATEOAS Support after POSTing 2m
- Demo: Implementing HATEOAS Support for a Collection Resource 4m
- Using HATEOAS for Pagination Links 1m
- Demo: Using HATEOAS for Pagination Links 2m
- Demo: Working Towards Self-discoverability with a Root Document 4m
- Other Approaches and Options 2m
- Summary 2m
- Coming Up 1m
- Revisiting the Contract Between Client and Server 2m
- HATEOAS and Content Negotiation 4m
- Demo: HATEOAS and Content Negotiation 6m
- Tightening the Contract Between Client and Server with Vendor-specific Media Types 4m
- Demo: Working with Vendor-specific Media Types on Output 6m
- Using Vendor-specific Media Types on Input 2m
- Demo: Working with Vendor-specific Media Types on Input 12m
- Demo: Improving Resource Representation Selection with an ActionConstraint 4m
- Versioning in a RESTful World 6m
- Summary 2m
- Coming Up 1m
- Supporting the Cacheable Constraint 4m
- Cache Types in HTTP Cache 3m
- Response Cache Attribute and Middleware 1m
- Demo: Adding Cache Headers to the Response 3m
- Demo: Adding a Cache Store with the ResponseCaching Middleware 2m
- Demo: Using Cache Profiles to Apply the Same Rules to Different Resources 2m
- The Expiration Model 7m
- The Validation Model 11m
- Exploring the Cache-control Directive 4m
- Summary 2m
- Coming Up 1m
- Supporting ETags 2m
- Demo: Adding Support for Generating ETags 5m
- Demo: Global Cache Header Configuration 4m
- Demo: Resource-level Cache Header Configuration 3m
- Demo: Dealing with Varying Response Representations 3m
- Demo: ETags and the Validation Model 5m
- Cache Stores and Content Delivery Networks 4m
- Cache Invalidation 2m
- Summary 2m