Modern API Design with ASP.NET Core 2 Building Cross-Platform Back-End Systems
Total Page:16
File Type:pdf, Size:1020Kb
Modern API Design with ASP.NET Core 2 Building Cross-Platform Back-End Systems Fanie Reynders Modern API Design with ASP.NET Core 2: Building Cross-Platform Back-End Systems Fanie Reynders Odijk, The Netherlands ISBN-13 (pbk): 978-1-4842-3518-8 ISBN-13 (electronic): 978-1-4842-3519-5 https://doi.org/10.1007/978-1-4842-3519-5 Library of Congress Control Number: 2018935910 Copyright © 2018 by Fanie Reynders Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book’s product page, located at www.apress.com/9781484235188. For more detailed information, please visit http://www.apress.com/source-code. Contents Foreword ����������������������������������������������������������������������������������������������������������������� ix Introduction����������������������������������������������������������������������������������������������������������� xvii Chapter 1: API Design Demystified ��������������������������������������������������������������������������� 1 The Importance of APIs ����������������������������������������������������������������������������������������������������������������� 1 REST: The Good, Bad, and Ugly������������������������������������������������������������������������������������������������������ 3 Principles of REST ������������������������������������������������������������������������������������������������������������������������� 5 Wrapping Up ��������������������������������������������������������������������������������������������������������������������������������� 7 Chapter 2: Introduction to ASP�NET Core ������������������������������������������������������������������ 9 What Is ASP�NET Core? ���������������������������������������������������������������������������������������������������������������� 10 NET Core vs �NET Framework ������������������������������������������������������������������������������������������������ 11 Why Use ASP�NET Core? �������������������������������������������������������������������������������������������������������������� 11 The �NET Ecosystem �������������������������������������������������������������������������������������������������������������� 12 ASP�NET Core Features ���������������������������������������������������������������������������������������������������������������� 13 Tooling Available for ASP�NET Core ���������������������������������������������������������������������������������������������� 13 Setting Up the Development Environment ���������������������������������������������������������������������������������� 16 A Lap Around the �NET Core CLI �������������������������������������������������������������������������������������������������� 19 Wrapping Up ������������������������������������������������������������������������������������������������������������������������������� 22 Chapter 3: Your First API Application ��������������������������������������������������������������������� 23 Getting Started ���������������������������������������������������������������������������������������������������������������������������� 23 Dependency Injection ������������������������������������������������������������������������������������������������������������������ 29 Application Startup ��������������������������������������������������������������������������������������������������������������������� 30 Creating an Endpoint ������������������������������������������������������������������������������������������������������������������� 33 Wrapping Up ������������������������������������������������������������������������������������������������������������������������������� 36 Chapter 4: Extensibility Architecture ���������������������������������������������������������������������� 37 Hosts and Servers ����������������������������������������������������������������������������������������������������������������������� 37 Creating a Custom Server������������������������������������������������������������������������������������������������������ 41 Middleware ��������������������������������������������������������������������������������������������������������������������������������� 49 Routing ���������������������������������������������������������������������������������������������������������������������������������������� 54 Hosted Services �������������������������������������������������������������������������������������������������������������������������� 57 Wrapping up �������������������������������������������������������������������������������������������������������������������������������� 59 Chapter 5: MVC ������������������������������������������������������������������������������������������������������� 61 The MVC Pattern ������������������������������������������������������������������������������������������������������������������������� 61 MVC in ASP�NET Core ������������������������������������������������������������������������������������������������������������������� 62 Controllers and Actions ��������������������������������������������������������������������������������������������������������������� 64 Model Binding and Validation ����������������������������������������������������������������������������������������������������� 75 Filters ������������������������������������������������������������������������������������������������������������������������������������������ 86 Formatting Responses ���������������������������������������������������������������������������������������������������������������� 89 Application Parts ������������������������������������������������������������������������������������������������������������������������� 93 Wrapping Up ������������������������������������������������������������������������������������������������������������������������������� 94 Chapter 6: The Configuration Model ����������������������������������������������������������������������� 95 Basic Configuration ��������������������������������������������������������������������������������������������������������������������� 96 Configuration Providers �������������������������������������������������������������������������������������������������������������� 99 Strongly Typed Configuration ���������������������������������������������������������������������������������������������������� 106 Working with Changes �������������������������������������������������������������������������������������������������������������� 110 Wrapping Up ����������������������������������������������������������������������������������������������������������������������������� 111 Chapter 7: Logging and Error Handling ���������������������������������������������������������������� 113 Adding Logging ������������������������������������������������������������������������������������������������������������������������� 114 Log Anatomy ����������������������������������������������������������������������������������������������������������������������������� 116 Grouping and Filtering �������������������������������������������������������������������������������������������������������������� 121 Different Logging Providers ������������������������������������������������������������������������������������������������������ 125 Dealing with Exceptions ������������������������������������������������������������������������������������������������������������ 127 Wrapping Up ����������������������������������������������������������������������������������������������������������������������������� 130 Chapter 8: Securing APIs �������������������������������������������������������������������������������������� 131 Authentication & Authorization ������������������������������������������������������������������������������������������������� 132 Protecting Sensitive Data ���������������������������������������������������������������������������������������������������������� 140 Enforcing SSL ���������������������������������������������������������������������������������������������������������������������������� 145 Cross-origin Requests ��������������������������������������������������������������������������������������������������������������� 146 Request Rate Limiting ��������������������������������������������������������������������������������������������������������������� 149 Wrapping Up ����������������������������������������������������������������������������������������������������������������������������� 153 Chapter 9: Bells & Whistles ���������������������������������������������������������������������������������� 155 HATEOAS ����������������������������������������������������������������������������������������������������������������������������������� 155 Versioning ��������������������������������������������������������������������������������������������������������������������������������� 165 Swagger ������������������������������������������������������������������������������������������������������������������������������������ 173 GraphQL ������������������������������������������������������������������������������������������������������������������������������������ 177 Wrapping Up ����������������������������������������������������������������������������������������������������������������������������� 184 Chapter 10: Testing & Debugging ������������������������������������������������������������������������� 185 Why Is Testing