Skip to main content

Learning Resources

This module is populated from the local chunked books in library/raw/semester-07-architecture-ddd/books. Use this page as a source map, not as an instruction to read everything.

Source Stack

BookRoleHow to use it in this module
API Design Patterns (JJ Geewax)Primary teaching sourceDefault escalation for resource modeling, standard methods, custom methods, LRO, batch, pagination, filtering, versioning, and deprecation
Fundamentals of Software Architecture (Richards & Ford)Selective supportAPIs as architectural surfaces, event-driven architecture style, monolithic vs distributed tradeoffs
Learning Domain-Driven Design (Khononov)Selective supportBounded contexts and integration patterns (Open Host Service, Published Language, Anticorruption Layer), event-driven architecture
Clean Architecture (Martin)OptionalBoundary discipline between layers and services
Just Enough Software Architecture (Fairbanks)PeripheralModeling vocabulary and architecture description

Resource Map by Cluster

Cluster 1: API as a Product

NeedBest local chunkWhy
what an API is, "good" criteriaGeewax: What are web APIs?Opens the whole discussion
resource-oriented framingGeewax: What are resource-oriented APIs?Core mental model for Cluster 2 as well
operational, expressive, simpleGeewax: Expressive and simpleDX criteria made concrete
predictabilityGeewax: PredictableThe fourth "good" property
pattern vocabularyGeewax: What are API design patterns?Grounds the "design pattern" language
why patterns matterGeewax: Why are API design patterns important?Governance / consistency rationale
namingGeewax: What makes a name goodConsistency begins here
case study of bad namingGeewax: Bad names case studyMakes consistency costs visible
APIs as an architectural surfaceFundamentals of Software Architecture: Defining software architectureHelps frame APIs at the architecture level

Cluster 2: HTTP/REST Resource Design

NeedBest local chunkWhy
resource layoutGeewax: What is resource layout?Starting model for URLs
relationship typesGeewax: Types of relationships1:1, 1:N, N:N and implications
ERD and relationship necessityGeewax: Entity relationshipsWhen relationships don't belong in the API
reference vs inline, anti-patternsGeewax: References vs inlineCommon anti-patterns to avoid
anti-patterns: resources for everythingGeewax: Anti-patternsThe two failure modes of resource modeling
standard methods - overviewGeewax: Which methods, idempotence, GETVerb discipline
ListGeewax: ListList-method contract
Create and UpdateGeewax: Create and updatePOST / PUT / PATCH details
DeleteGeewax: DeleteDelete semantics and tradeoffs
partial updatesGeewax: Partial update motivationWhen PATCH is the right answer
page sizeGeewax: Page sizeBounding responses
page tokensGeewax: Page tokensCursor-based pagination
offsets-and-limits anti-patternGeewax: Total count, offsets-limits anti-patternWhy offset paging is wrong default
filter structureGeewax: Filtering structureDesigning filter param shape
filter syntax part 1Geewax: Filter syntax 1Expression grammar
filter syntax part 2Geewax: Filter syntax 2Operators and behaviors
filter syntax part 3, tradeoffsGeewax: Filter syntax 3 and tradeoffsClosing the filtering discussion

Cluster 3: Beyond CRUD - Actions, Events, and Async Patterns

NeedBest local chunkWhy
custom methods motivationGeewax: Custom methods motivationWhy CRUD does not fit
custom methods overviewGeewax: Overview, side effectsThe :verb pattern and its rules
custom methods on collectionsGeewax: Resources vs collections, tradeoffsCollection-level actions
LRO motivationGeewax: LRO motivationWhy async contract matters
LRO overviewGeewax: LRO overviewWhat an LRO looks like
LRO resolutionGeewax: LRO resolutionCompletion semantics
LRO errors and monitoringGeewax: Error handling and monitoringHow clients observe progress
LRO cancel, exploreGeewax: Canceling and exploringFull LRO lifecycle
rerunnable jobsGeewax: Rerunnable jobsJobs as first-class resources
batch motivationGeewax: Batch - collective operationsWhy batches are a distinct pattern
batch atomicityGeewax: Batch atomicityThe hardest batch decision
batch operations (get, create, update)Geewax: Batch get, batch createMechanics per batch flavor
import / exportGeewax: Import-exportFile-based bulk pattern
import/export consistencyGeewax: Consistency, ids, relativesNon-obvious file-pattern contracts
request deduplication / idempotencyGeewax: Request deduplicationCentral to webhook consumers and retries
retries - back-offGeewax: Exponential back-offRetry policy discipline
retries - Retry-AfterGeewax: Retry-After, tradeoffsServer-guided retry behavior

Cluster 4: RPC, GraphQL, and Event-Driven APIs

NeedBest local chunkWhy
RPC vs resource-oriented framingGeewax: What are web APIs? (revisit)Grounds the RPC/REST contrast
distributed architecture contextFundamentals of Software Architecture: Monolithic vs distributedWhere RPC/GraphQL/events fit in topology
event-driven styleFundamentals of Software Architecture: EDA styleMediator vs broker topology
event-driven architecture in DDDLearning DDD: Event-driven architectureDomain-level framing for events
types of eventsLearning DDD: Types of eventsNotification vs state-carried, and the failure mode
bounded contexts and integrationLearning DDD: Cooperation to conformistPartnership, customer-supplier, conformist
anticorruption layerLearning DDD: Anticorruption layerWhen consuming an API you do not control
model translationLearning DDD: Model translationTranslating published languages

Cluster 5: Versioning, Deprecation, Compatibility

NeedBest local chunkWhy
compatibility definitionGeewax: What is compatibility?Establishes the vocabulary
defining backward compat, part 1Geewax: Backward compatibility 1Concrete rules begin here
defining backward compat, part 2Geewax: Backward compatibility 2Subtle cases
defining backward compat, part 3Geewax: Backward compatibility 3 + implementationImplementation patterns
perpetual stabilityGeewax: Perpetual stabilityOne stance on versioning
agile instabilityGeewax: Agile instabilityThe opposite stance
semantic versioningGeewax: Semantic versioning and tradeoffsMiddle ground, library-like
versioning tradeoffsGeewax: Granularity vs simplicityChoosing version granularity
deprecation and ubiquityGeewax: Happiness vs ubiquityRollout pragmatics
soft delete motivationGeewax: Soft deletion motivationSoft deletion pattern for resources
deleted designationGeewax: Deleted designationMarking deletion on resources
expunging and effectsGeewax: ExpungingHard removal after soft-delete
soft delete across versionsGeewax: Soft delete across versions, tradeoffsIntroducing deprecation in a live API

Exercise Support Chunks

Use these when concept pages are understood but you need pattern volume:

External Resources (Read-If-Curious)

Only use these if you want a second exposition or a supplementary problem source. The module is completable from the local chunks alone.

Use Rules

  • If you are stuck on resource modeling or URL design, go to Geewax Cluster 2 chunks first.
  • If you need versioning rigor, go to Geewax chunks 101-109.
  • If you need event-driven framing (not just transport), use Learning DDD and Fundamentals of Software Architecture.
  • Open one chunk for one gap; do not wander through a whole chapter sequence by default.
  • External URLs are reference material, not a reading list. Google API Design Guide can replace half this module's content - but reading it cover-to-cover is not required.