Tutorials Microservices with .NET
API Contracts — Complete Guide
API Contracts — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Microservices with .NET on Toolliyo Academy.
On this page
Microservices with .NET · Lesson 22 of 131
API Contracts
Beginner ✓ → Intermediate → Advanced → Professional
Intermediate · 2 — Building services · ~6 min · Module 3: ShopNest Services and Integration
What is this?
API contracts are the agreed request/response shapes between services — JSON fields, URLs, status codes. Order.Api promises POST /orders returns { id, status }.
Why should you care?
Without contracts, Payment breaks when Order renames a field silently. Contracts let teams develop in parallel.
See it live — copy this example
Create a Web API project (dotnet new webapi), paste the code, then run dotnet run.
// ShopNest.Contracts/Orders/CreateOrderRequest.cs
public record CreateOrderRequest(
Guid CustomerId,
IReadOnlyList<OrderLineRequest> Lines);
public record OrderCreatedResponse(Guid Id, string Status, decimal Total);
// Order.Api implements exactly this shape
Run Example »
This lesson uses terminal or setup steps. Run commands on your computer — the live editor appears on coding lessons.
What happened?
- Shared contract project holds DTOs only — no database, no business logic.
- Version contracts when you must break clients.
Try it yourself
- Create ShopNest.Contracts class library.
- Add CreateOrderRequest and OrderCreatedResponse records.
- Reference Contracts from Order.Api and from a future Gateway.
- Change a string or route in the example and save — watch Swagger or the RabbitMQ Management UI update.
- Break the code on purpose (remove a semicolon), read the error message, then fix it.
Remember
Contracts = public DTOs between services. Keep contracts thin — no EF, no HTTP clients. Version when breaking; prefer additive changes.
Real-world: Mobile app + BFF
Android app depends on stable OrderCreatedResponse. Backend team adds field — old apps ignore it; never rename id to orderId without version.
Outcome: Contract tests in CI catch breaking JSON before production.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!