index

Symbols

/.well-known/openid-configuration endpoint 277

$ref keyword, JSON Schema/OpenAPI 9394

A

access tokens, OAuth 277

ACID principles 174

active record pattern 155

ACU (Aurora Capacity Units) 364

adapters, hexagonal architecture 145

additionalProperties, JSON schema/OpenAPI 115116

add_middleware() method, FastAPI framework 290, 292

AKS (Azure’s Kubernetes Service) 343

ALB (Application Load Balancer), AWS

deploying 351353

Alembic 150152

batch operations 295297

configure() method 296

initializing 151

run_migrations_online() function 296

running migrations with 155, 339

sqlalchemy.url 151

target_metadata 152

alg header, JWT 280

allOf keyword, JSON Schema/OpenAPI 104

ALTER statements 295

API authorization 293300

restricting user access to their own resources 297300

updating database to link users and orders 294297

API Gateway 287

APIIntegrationError exception, orders service 169

API layer, integrating with service layer 177181

API life cycle 390

managing 389390

APIs, defined 89

APISpec object, apispec library 142

API testing and validation 302330

designing testing strategy 329330

GraphQL API testing 327329

with Schemathesis 327329

property-based testing 315322

defined 315

traditional approach to testing 316317

with hypothesis 318322

REST API testing with Dredd 304315

customizing test suite with hooks 307315

overview 304305

running default test suite 305307

using in testing strategy 315

REST API testing with Schemathesis 322327

running default test suite 322323

using - -checks=all 326327

using - -stateful=links 323327

API validation models (REST)

implementing with marshmallow 129130

implementing with pydantic 3034

API versioning 387389

apiVersion property, Kubernetes manifest 356

arguments() decorator, flask-smorest 130, 134

Ariadne framework 235241

building resolvers for custom scalars 258262

creating entry point for GraphQL server 242243

handling query parameters 252255

implementing field resolvers 262265

implementing mutation resolvers 256258

implementing query resolvers 243246

implementing resolvers for custom scalars 258262

implementing type resolvers 246252

array type, JSON Schema/OpenAPI 92, 99

ASGI (asynchronous server gateway interface) 24

asynchronous server gateway interface (ASGI) 24

aud reserved claim, JWT 281282

Aurora Capacity Units (ACU) 364

authorization and authentication 269301

adding authorization to server 287293

creating authorization middleware 289292

creating authorization modules 287289

authorizing requests in Swagger UI 400402

authorizing resource access 293300

restricting user access to their own resources 297300

updating database to link users and orders 294 – 297

client credentials flow 399400

identity providers 391402

using identity as service provider 392397

JWTs 278286

inspecting 284285

JWT claims 280282

JWT header 279280

producing 282284

validating 286

OAuth 271275

authorization code flow 273

client credentials flow 275

PKCE flow 273275

refresh token flow 275

OIDC 276278

PKCE flow 397398

authorization code, OAuth 274

Authorization HTTP header 108

Authorization server, OAuth 272

AuthorizeRequestMiddleware class, orders API 289

AWS Aurora 361370

creating serverless databases 361364

running database migrations and connecting service to database 367370

aws ecr get-login-password command 341

AWS KMS (Key Managed Service) 364

AWS Load Balancer Controller, installing 353

aws rds create-db-cluster command 365

azp reserved claim, JWT, OIDC 282

B

base64 encoding 284285

base64 library, Python 285

BaseConfig class, flask-smorest 124

BaseHTTPMiddleware class, FastAPI/Starlette 289

BaseModel class, Pydantic 32

bastion server 367

bearerAuth security scheme, OpenAPI 304, 400401

Blueprint class (flask-smorest) 125

Body property, SOAP 379

Boolean scalar (GraphQL) 194

boolean type, JSON Schema/OpenAPI 92

build context, Docker Compose 338

Building Microservices (Newman) 8

business layer, implementing 162172

C

cacheability principle (REST) 6566

calendar versioning (CalVer) 388

charts (Helm) 352

CIDR (Classless Inter-Domain Routing) 349

class-based views 122123, 125127

client credentials flow, OAuth 275, 399400

client-server architecture principle (REST) 64

CLIs (command-line interfaces) 8

CloudFormation 346

ClusterIP (Kubernetes service) 357358

CMD directive, Docker 335

Cockburn, Alistair 145

code challenge, OAuth 274

code-on-demand principle (REST) 66

code verifier, OAuth 274

CoffeeMesh 17

analyzing business structure of 4950

applying strategic analysis to 5356

decomposing microservices 5052

kitchen API (REST)

flask-smorest 122123

implementing endpoints 125129

implementing in-memory list of schedules 140142

implementing payload validation models 129132

initializing web application 123125

overriding dynamically generated specification 142143

overview 120122

validating data before serializing response 136139

validating URL query parameters 133136

orders API (REST)

high-level architecture 2223

implementing API endpoints 2328

implementing data validation models with pydantic 3034

implementing in-memory list of orders 4143

marshalling and validating response payloads with pydantic 3841

overriding FastAPI’s dynamically generated specification 118120

overview 111112

specification 2122

URL query parameters for 112115

validating payloads with unknown fields 115118

validating request payloads with pydantic 3438

overview 46

products API (GraphQL) 241265

combining types through unions and interfaces 200202

constraining property values with enumerations 202203

creating entry point for GraphQL server 242243

custom scalars 194195

defining queries 203, 206

GraphQL 186189

handling query parameters 252255

implementing field resolvers 262265

implementing mutation resolvers 256258

implementing query resolvers 243246

implementing resolvers for custom scalars 258262

implementing type resolvers 246252

laying out project structure 241242

mutations 206209

overview 189192

collections resources, REST 62

Column class (SQLAlchemy) 153

commit() method (SQLAlchemy) 175176

Config class, Pydantic 116

configure() method (Alembic) 296

conint type, Pydantic 33

conlist type, Pydantic 33

container registry, publishing Docker builds to 340341

containers, Docker 331

content property, OpenAPI 99

context managers 174175

COPY directive, Docker 335

core domain, domain-driven design 53

Core Kubernetes (Vyas and Love) 345

CORS (cross-origin resource sharing)

adding CORS middleware 292293

CORS (Cross-Origin Resource Sharing) middleware 292293

create_engine() function (SQLAlchemy) 175

cryptography library 271, 283, 286, 288, 395397

custom claims, JWT 281

D

DaemonSet, Kubernetes workload 345

database-data volume, Docker Compose 338

database models, implementing 149155

database-per-service principle 4648

database subnet group, AWS 361

data encryption key (DEK) 364

data mapper pattern 150

Datetime custom scalar (GraphQL) 194, 258260

datetime.fromisoformat() method 260

db-access security group 362

db-credentials secret 366, 369

DDD (domain-driven design) 5253, 166

declarative_base() function (SQLAlchemy) 153

decode() function (PyJWT) 287

decorator pattern 26

default namespace, Kubernetes 347

DEK (data encryption key) 364

dependency injection pattern 165

dependency inversion pattern 146

Deployment workload, Kubernetes 345

deployment objects, creating 354356

Deprecation HTTP header 389390

deserialization 259

Dias, Nuwan 333

directed connections (GraphQL) 197

discoverability (HATEOAS, REST) 7273

discovery endpoint (OIDC) 277

dispatch() method (Starlette middleware) 289

distributed monolith 11

distributed transaction tracing 1314

Docker 331341

building image 333336

Docker volume 336339

publishing Docker builds to container registry 340341

running applications with Docker Compose 338340

running containers 336338

Docker Compose, running applications with 338340

Docker in Action (Kuenzli) 338

docker stop command 337

documentation-driven development 1517

domain-driven design (DDD) 5253, 166

Domain-Driven Design (Evans) 52

domain objects 166

Dredd

overview 304305

REST API testing with 304315

customizing test suite with hooks 307315

installing and running default test suite 305307

using in testing strategy 315

using hooks to make Dredd use custom URLs 311

Dredd hooks 307315

creating resources before test 312

generating error responses 313314

saving ID of created resource 309311

using custom URLs 311

dredd-hooks library 310

dredd_hooks.after() decorator 310

dredd_hooks.before() decorator 310

dumb pipes 10

E

ECR (Elastic Container Registry) 340341

edge properties (GraphQL) 196

eksctl CLI 346349

EKS (Elastic Kubernetes Service), AWS 346349

Elastic Container Registry (ECR), AWS 340341

encode() function, PyJWT 282283

__enter__() method, context manager class 174176

EnumType Ariadne 240

enum type (GraphQL) 202203

envelope encryption 364365

Envelope property, SOAP 379

envFrom property, Kubernetes manifest 369

environment keyword, Docker Compose 338

Error generic model, OpenAPI 105, 107

Evans, Eric 52

__exit__() method, context manager class 174175

EXPOSE directive, Docker 335

exp reserved claim, JWT 281283

ExternalName, Kubernates service 358

F

facade pattern 167

Fargate, AWS 347

Fargate profile 348

FastAPI

implementing API endpoints 2328

implementing data validation models with pydantic 30 – 34

marshalling and validating response payloads with pydantic 3841

overriding dynamically generated specification 118120

validating payloads with unknown fields 115118

validating request payloads with pydantic 3438

validating URL query parameters 112115

Fault property, SOAP 379

field() decorator (Ariadne) 240, 256

field resolvers, implementing with Ariadne 262265

filter_by() method (SQLAlchemy) 160

first() method (SQLAlchemy) 160

fixed_dictionaries(), hypothesis 319320

Flask application object 124

flask-smorest

implementing endpoints 125129

implementing payload validation models 129132

initializing web application 123125

overriding dynamically generated specification 142143

overview 122123

validating response payload 136139

validating URL query parameters 133136

Float scalar (GraphQL) 192, 194

Fowler, Martin 4, 8, 10

FROM directive, Docker 335

G

generate_jwt() function 283

GET requests, response payloads for (REST) 86

given() decorator, hypothesis 321

grant_type property, OAuth 399

GraphQL API design 185209

arrays 195196

connecting types 196200

with edge properties 196198

with through types 198200

defined 186189

designing and documenting queries 203206

enumerations 202203

mutations 206209

overview 186189

products API 189192

SDL (Schema Definition Language) 15, 186

type system 192195

custom scalars 194195

modeling resources 193194

scalars 192193

unions and interfaces 200202

GraphQL API implementation 233266

analyzing requirements 234

Ariadne framework 235241

products API 241265

building resolvers for custom scalars 258262

creating entry point for GraphQL server 242243

handling query parameters 252255

implementing field resolvers 262265

implementing mutation resolvers 256258

implementing query resolvers 243246

implementing type resolvers 246252

laying out project structure 241242

GraphQL API querying 210232

calling GraphQL API with Python code 230231

granular queries 382386

mutations

running 225226

running parametrized 226229

navigating the API graph 219221

queries 214217

aliasing 222225

over HTTP 229230

running multiple 221

running parametrized 226229

running simple 214215

running with input parameters 219

running with parameters 215

understanding errors 215217

using fragments in 217219

running mock server 211214

GraphQL API testing 327329

GraphQL class (Ariadne framework) 237, 242243

graphql-faker (GraphQL mocking tool) 211213

GraphQL type resolvers (Ariadne library) 246252

gRPC 380381

H

HATEOAS (Hypermedia as Engine of Application State) 6770

header, JWT 179180

header (HTTP) 105106

Header property, SOAP 379

hexagonal architecture 145148

HMAC encryption 280

HMAC-SHA256 encryption 280

HS256 encryption 280

HTTP (Hypertext Transfer Protocol) 9

HTTP methods 7276

HTTP-native APIs with REST 382

HTTP payloads 8386

definition 8384

design patterns 8486

response payloads for GET requests 86

response payloads for POST requests 84

response payloads for PUT and PATCH requests 85

HTTP status codes 72, 7783

defined 7778

reporting client errors with 7881

reporting errors in server with 8283

Hypermedia as Engine of Application State (HATEOAS) 6770

hypothesis library 315316, 318, 322323

- -hypothesis-database flag 323

- -hypothesis-deadline option 328

- -hypothesis-suppress-health-check flag 327

property-based testing with 318319

testing endpoints 319322

I

IAM roles, AWS 350351

iat property, JWT 281283

identity, OIDC 391402

ID tokens (OIDC) 277

ID (Unique Identifiers) scalar, GraphQL 192194

info parameter (Ariadne resolvers) 239240, 256

infrastructure overhead 1415

ingress controller, Kubernetes 351

ingress objects, Kubernetes 359361

ingress resources 351

inline fragment (GraphQL) 218

input parameters (GraphQL) 225, 252, 256

Integer field class, marshmallow library 129

integers() strategy, hypothesis 318

InterfaceType (Ariadne framework) 240

interface type (GraphQL) 200202

Int scalar (GraphQL) 192, 194

inversion of control container 147, 165

inversion of control principle 165

iss reserved claim, JWT 281

items property, OpenAPI 93

J

jq (JSON query CLI) 344

JSON (JavaScript Object Notation) 377, 380

JSONPath 94

JSON pointer 9394

JSON-RPC 377386

JSON Schema 9195

jsonschema library 321

jti reserved claim, JWT 281

JWKS (JSON Web Keys) 278

jwks_uri property 394

jwt_generator.py script 284, 292

JWTs (JSON Web Tokens) 108, 278286, 391

inspecting 284285

JWT claims 280282

JWT header 279280

producing 282284

validating 286

K

KEK (key encryption key) 364

kid header property, JWT 280

kind property, Kubernetes manifest 357

kitchen API

flask-smorest 122123

implementing API endpoints 125129

implementing in-memory list of schedules 140142

implementing payload validation models with marshmallow 129132

initializing web application for API 123125

overriding flask-smorest dynamically generated API specification 142143

overview 120122

validating response payloads 136139

validating URL query parameters 133136

kubectl CLI 344

api-resources command 356

apply command 357

Kubernetes 342375

creating clusters with EKS 346349

deleting clusters 372374

deploying load balancers 351353

deploying microservices to cluster 353361

creating deployment object 354356

creating service object 357358

exposing services with ingress objects 359361

IAM roles for service accounts 350351

managing secrets in Kubernetes 364367

overview 344346

Kubernetes clusters

creating 346349

deleting 372374

deploying microservices to 353361

Kubernetes control plane 345

Kubernetes in Action (Lukša) 372

kube-system namespace 347, 352353

Kuenzli, Stephen 338

L

labels, Kubernetes 355

Lancey, Vallery 348

layered system principle 66

Lewis, James 4, 8, 10

libcurl library 89

Link HTTP header 390

links, OpenAPI 323325

lists() strategy, hypothesis 320

load balancer 346

LoadBalancer, Kubernetes service 358

loose coupling principle 48

Love, Chris 345

Lukša, Marko 372

M

machine_to_machine_test.py script 400401

make_executable_schema() function (Ariadne framework) 237, 240, 243, 245, 251252, 257, 261

marshalling 30

marshmallow, implementing payload validation models 129132

Meta class, marshmallow 129

metadata property, Kubernetes manifest 357

MethodView class, Flask 125127

microservice API deployment 342375

creating clusters with EKS 346349

deploying microservices to cluster 353361

creating deployment object 354356

creating service object 357358

exposing services with ingress objects 359361

microservice APIs 319

authorization and authentication 269301

basic implementation of REST API with FastAPI 2044

implementing data validation models 3034

implementing endpoints 2328

marshalling and validating response payloads 3841

validating request payloads 3438

building REST APIs with Python 110143

challenges of microservices architecture 1115

distributed transaction tracing 1314

microservices integration tests 12

operational complexity and infrastructure overhead 1415

service decomposition 11

service unavailability 1213

CoffeeMesh application 17

Dockerizing 331341

documentation-driven development 1517

GraphQL API

consumption 210232

creation 233266

design 185209

REST API design principles 6189

REST API documentation 90109

service implementation patterns 144181

testing and validation 302330

web APIs 811

APIs, defined 89

role of in microservices integration 911

microservice design 4558

design principles 4649

database-per-service principle 4648

loose coupling principle 48

single responsibility principle 49

service decomposition

by business capability 4952, 5758

by subdomains 5258

microservices 48

defined 45

history of 78

monoliths vs. 57

microservices integration tests 12

Microservices Patterns (Richardson) 11

Microservices Security in Action (Siriwardena and Dias) 333

middleware 287

migration (databases) 150

running with Alembic 151, 155, 339

mock servers

GraphQL 211

REST API 168169

model composition, JSON Schema/OpenAPI 103104

monoliths 5

microservices vs. 57

MTV (model-template-view) pattern 17

mutation resolvers, implementing, GraphQL/Ariadne framework 256258

mutations, GraphQL

designing 206209

implementing mutation resolvers 256258

running 225226

running parametrized 226229

MutationType class (Ariadne framework) 256257

N

namespaces, Kubernetes 346

nbf reserved claim, JWT 281

Networking and Kubernetes (Strong and Lancey) 348

Nickoloff, Jeff 338

NodePort service, Kubernetes 358

nonce keyword, JWT header 280

null type, JSON Schema/OpenAPI 92

number type, JSON Schema/OpenAPI 92

O

OAS (OpenAPI Specification) 21, 382

OAuth2 (Open Authorization) 108

OAuth (Open Authorization) 271275, 391

authorization code flow 273

client credentials flow 275

PKCE flow 273275

refresh token flow 275

object relational mapper (ORM) 150151

object type (GraphQL) 193

object type, JSON Schema/OpenAPI 92

ObjectType (Ariadne) 240

obj parameter, Ariadne resolvers 239240, 256

OIDC (OpenID Connect) 18, 271, 276 – 278, 350, 391

one() method (SQLAlchemy) 160

one-to-many connection, GraphQL 197

one-to-one connection, GraphQL 197

on keyword (GraphQL) 218

OpenAPI 21, 90109, 382

anatomy of 9596

endpoints 9697

JSON Schema 9195

links 323325

model composition 103104

refactoring schema definitions 100102

request payloads 98100

responses

creating generic 105107

documenting 102105

securitySchemes 107109

servers property 96, 370372

URL query parameters 9798

openapi property, OpenAPI 119

Open Authorization (OAuth) 108

OpenID Connect in Action (Siriwardena) 278

OpenID Connect (OIDC) 18, 271, 276278, 350, 391

operational complexity 1415

orders API

high-level architecture 2223

implementing API endpoints 2328

implementing data validation models with pydantic 3034

implementing in-memory list of orders 4143

marshalling and validating response payloads with pydantic 3841

overriding FastAPI dynamically generated specification 118120

overview 111112

URL query parameters for 112115

validating payloads with unknown fields 115118

validating request payloads with pydantic 3438

ORM (object relational mapper) 150151

overfetching 384

P

PATCH (HTTP method) 74, 85, 384

percent encoding 230

pickle serialization (Python) 380

Pipenv 25

- -deploy flag, pipenv 335

- -system flag 335

PKCE (Proof of Key for Code Exchange) flow, OAuth 273275, 397398

pods, Kubernetes 345

ports, hexagonal architecture 145146

Postel’s law 115

PostgreSQL 332, 365

POST (HTTP method) 74

POST requests, response payloads for 84

preflight request 289

prism (API mocking tool) 168169

private key 283284

ProductInterface type, Products API 201202, 218, 220221, 225, 234, 247

products API (GraphQL) 241265

building resolvers for custom scalars 258262

combining types through unions and interfaces 200202

constraining property values with enumerations 202203

creating entry point for GraphQL server 242243

custom scalars 194195

designing queries 203206

GraphQL 186189

handling query parameters 252255

implementing field resolvers 262265

implementing mutation resolvers 256258

implementing query resolvers 243246

implementing type resolvers 246252

laying out project structure 241242

mutations 206209

overview 189192

Product type 201202, 207, 217, 225, 234, 239, 247, 250251, 258

Product type 201202, 207, 217, 225, 234, 239, 243, 247, 250251, 258

properties, JSON Schema/OpenAPI 92

property() decorator, Python built-in 166

property-based testing 315322

defined 315

using hypothesis to test endpoints 319322

vs. traditional approach to testing 316317

with hypothesis 318319

Protobuf (Protocol Buffers) 380

psycopg, Python library 332

public certificate 283284

public key 283286

PUT (HTTP method) 74, 80

PUT vs. PATCH requests 85

Pydantic library

implementing data validation models 3034

marshalling and validating response payloads 3841

validating payloads with unknown fields 115118

validating request payloads 3438

PyJWT library 270271, 282

pytest 317

PYTHONPATH environment variable 155

Q

queries (GraphQL) 206, 214, 217

aliasing 222225

handling query parameters 252255

implementing query resolvers 243246

over HTTP 229230

query document (GraphQL) 214

running 214215

running multiple 221

running parametrized 226229

running with input parameters 219

running with parameters 215

understanding errors 215217

using fragments in 217219

query aliasing, GraphQL 222225

query resolvers, implementing (GraphQL) 243246

QueryType class (Ariadne framework) 240, 245, 256

R

read-only properties (REST) 84

Real-World Cryptography (Wong) 280

refresh token flow, OAuth 275

relationship() function, SQLAlchemy 153

replaceability principle 11

repository pattern 155162

definition 155157

implementing 157162

requestBody, OpenAPI 99

request payloads, REST APIs

documenting 98100

implementing validation models with marshmallow 129132

validating with pydantic 3438

requests library 169

reserved claims, OIDC, OAuth, and JWT 281

resolvers (GraphQL; Ariadne framework)

building resolvers for custom scalars 258262

implementing field resolvers 262265

implementing mutation resolvers 256258

implementing query resolvers 243246

implementing type resolvers 246252

resource owner, OAuth 272

resources, REST 7172

resource server, OAuth 272

response() decorator, flask-smorest 130

response payloads (REST)

for GET requests 86

for POST requests 84

for PUT and PATCH requests 85

implementing validation models with marshmallow 129132

marshalling and validating with pydantic 3841

responses, OpenAPI

designing generic 105107

documenting 102105

REST API design principles 6189

architectural constraints of REST applications 6367

cacheability principle 6566

client-server architecture principle 64

code-on-demand principle 66

layered system principle 66

statelessness principle 6465

uniform interface principle 67

HATEOAS 6770

HTTP-native APIs with REST 382

HTTP payloads 8386

defined 8384

design patterns 8486

HTTP status codes 7783

defined 7778

reporting client errors in request 7881

reporting errors in server 8283

REST, defined 6263

Richardson maturity model 7073

structured resource URLs with HTTP methods 7376

URL query parameter design 8788

REST API endpoints

documenting 9697

implementing with FastAPI 2328

implementing with flask-smorest 125129

testing with hypothesis 319322

REST API implementation 110143

kitchen API

flask-smorest 122123

implementing endpoints 125129

implementing payload validation models 129132

initializing web application 123125

overriding dynamically generated specification 142143

overview 120122

validating response payloads 136139

validating URL query parameters 133136

orders API

high-level architecture 2223

implementing API endpoints 2328

implementing data validation models with pydantic 3034

marshalling and validating response payloads with pydantic 3841

overriding FastAPI dynamically generated specification 118120

overview 111112

specification 2122

URL query parameters for 112115

validating payloads with unknown fields 115118

validating request payloads with pydantic 3438

REST API testing

with Dredd 304315

customizing test suite with hooks 307315

installing and running default test suite 305307

overview 304305

using in testing strategy 315

with Schemathesis 322327

running default test suite 322323

using - -checks=all 326327

using - -stateful=links 323327

REST (Representational State Transfer) 61, 382

Richardson, Chris 11

Richardson, Leonard 70

Richardson maturity model 7073

Riedesel, Jamie 14

rollback() method (SQLAlchemy) 174, 176

route() decorator, flask-smorest 125, 127

RPC (remote procedure call) 71, 377386

JSON-RPC 377386

XML-RPC 377386

RS256 encryption 280

RSA encryption 280

RSA-SHA256 encryption 280

RUN directive, Docker 335

run_migrations_online() function (Alembic) 296

S

ScalarType class (Ariadne framework) 260

scalar types (GraphQL) 192

building resolvers for custom scalars 258262

creating custom 194195

designing object properties with 192193

ScheduleOrderSchema schema, kitchen API 121, 129

Schema class, marshmallow 129

Schemathesis library 315, 327

GraphQL API testing 327329

REST API testing 322327

running default test suite 322323

using - -checks=all 326327

using - -stateful=links 323327

SDL (Schema Definition Language) 15, 186

securitySchemes, OpenAPI 107109

selection set (GraphQL) 214

serialization 259, 380

serializer() decorator, ScalarType (Ariadne framework) 260

serverless databases 361370

creating 361364

running database migrations and connecting service to database 367370

server-side properties, REST APIs 84

servers section, OpenAPI 96, 119, 370372

service, Kubernetes 354, 357358

service decomposition 11, 45

by business capability 4952

analyzing business structure 4950

decomposing microservices 5052

vs. by subdomains 5758

by subdomains 5256

applying strategic analysis 5356

domain-driven design 5253

vs. by business capability 5758

service implementation patterns 144181

hexagonal architecture 145148

implementing business layer 162172

implementing database models 149155

implementing unit of work pattern 172177

integrating API layer and service layer 177181

repository pattern 155162

defined 155157

implementing 157162

service layer, integrating with API layer 177181

service-oriented architecture 7

service unavailability 1213

sessionmaker() function (SQLAlchemy) 175

session object, UnitOfWork 176

Session object (SQLAlchemy) 161, 174

signature, JWT 279

single responsibility principle (SRP) 46, 49

singleton resource, REST APIs 62

Siriwardena, Prabath 278, 333

smart endpoints 10

SOAP (Simple Object Access Protocol) 378379

Software Telemetry (Riedesel) 14

solution space, domain-driven design 53

SPAs (single-page applications) 64, 274, 397

SQLAlchemy 150155

Column class 153

commit() method 175176

create_engine() function 175

declarative_base() function 153

filter_by() method 160

first() method 160

one() method 160

relationship() function 153

rollback() method 174, 176

sessionmaker() function 175

Session object 161, 174

SQLite 150151, 295296

SRP (single responsibility principle) 46, 49

Starlette framework 24

StatefulSet workload (Kubernetes) 345

statelessness principle (REST) 6465

strategic design, domain-driven design 53

string data type, JSON Schema/OpenAPI 92

String field class, marshmallow 129

String scalar (GraphQL) 192194

Strong, James 348

stubs (gRPC) 381

subdomain, domain-driven design 53

subnet, AWS 349

sub reserved claim, JWT 281

Sunset HTTP header 390

supportive subdomain, domain-driven design 53

Swagger UI

authorizing requests 400402

defined 117

T

tags property, OpenAPI 107

target groups, AWS ALB 352

test fixtures 307

Testing Web APIs (Winteringham) 304

text() strategy, hypothesis 318

three-tier architecture 2223

tolerant reader pattern 115116

types, GraphQL 192195

building resolvers for custom scalars 258262

combining through unions and interfaces 200202

edge properties 196198

scalars, creating custom 194195

through types 198200

U

ubiquitous language, domain-driven design 53

unevaluatedProperties, JSON Schema/OpenAPI 114

uniform interface principle, REST APIs 67

union type, GraphQL 200202

UnionType class (Ariadne) 251

UnitOfWork class 177

unit of work pattern 172177

unmarshalling 380

Unprocessable Entity (409 HTTP status code) 79

URI (Uniform Resource Identifier) 67

URL encoding 229

URL query parameters

design 8788

documenting 9798

for kitchen API (flask-smorest) 133136

for orders API (FastAPI) 112115

validating 133136

URLs (Uniform Resource Locators) 9

structured resource URLs with HTTP methods 7376

UUID (universally unique identifier) 27, 102

uvicorn 24, 112, 235

V

validate() function, jsonschema 321

ValidationError exception, marshmallow 139

validator() decorator, Pydantic 37

value_parser() decorator (Ariadne) 260

VPC (Virtual Private Cloud), AWS 348

Vyas, Jay 345

W

web APIs 811, 376386

APIs, defined 89

defined 9

emergence of API standards 378379

granular queries with GraphQL 382386

HTTP-native APIs with REST 382

role of in microservices integration 911

RPC 377386

gRPC 380381

JSON-RPC 377386

XML-RPC 377386

SOAP 378379

Winteringham , Mark 304

Wong, David 280

WORKDIR directive, Docker 335

X

X.509 certificates

defined 283

generating 283

XML-RPC 377386

Y

yaml library, Python 321

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.142.43.216