APIs Are Forever - How to Design Long-Lasting APIs

33
APIs Are Forever: How to Design Long-Las6ng APIs James Higginbotham API Architect @launchany

Transcript of APIs Are Forever - How to Design Long-Lasting APIs

APIsAreForever:HowtoDesignLong-Las6ngAPIs

JamesHigginbothamAPIArchitect@launchany

YourAPItellsastory.Whatstorydoesyourstell?

IfyourAPIisthestory,youaredoingitwrong.

DowecreateoneAPIproduct?Morethanoneproduct?

Howcanwepreventaredesign?

Architectureisdesign

WebAPIsareanarchitecturalconcernthatexposeaninterfaceto

anunderlyingsystem.Designthemtotellyourstory.

“Wehaveamonolithicapp,butweareintheprocessofrearchitecDngitusingmicroservicesandAPIs.”

--anyonewherecode.age>=3months

Whydowehave“monolithicregret”andhow

canweavoidit?

LackofModulariza6on=Regret

VS

Func6on-Based Module-Based

(Re)IntroducingSystemsDesignandDomain-DrivenDesign

ModelingaSystem

System/Solu6on

Subsystem Subsystem

Module Module

Module Module

Subsystem SubsystemModule Module

TheSystemofLEGO

System

Sub-systems

Modules

“YourAPIdesignshouldbecomethedefiniDonofyournew

targetarchitecture“-@jharmn

MulD-SidedMarketplacePlaRormAPIExample

ListAvailInventory

DistributorAddProducttoOrder

CompleteOrder

CancelBooking

AddProducttoInventory

UpdateProductQty

LocateBooking

RedeemBooking

PointOfSale

RemoveProduct

Customer

Operator

Operator

OrderMgmt

ListAvailInventory

DistributorAddProducttoOrder

CompleteOrder

CancelBooking

AddProducttoInventory

UpdateProductQty

LocateBooking

RedeemBooking

Operator

PointOfSale

RemoveProduct

Customer

Operator

InventoryMgmt

Fulfillment

EachsubsystemhasanAPIthatexposesoneormoreendpoints.

OrderAPI

ListAvailInventory

DistributorAddProducttoOrder

CompleteOrder

CancelBooking

AddProducttoInventory

UpdateProductQty

LocateBooking

RedeemBooking

PointOfSale

RemoveProduct

Customer

Operator

InventoryAPI

FulfillmentAPI

Operator

IdenDfyingtheproductsbecomeseasierwhenwehaveboundariesaroundtheAPIs

OrderAPI

ListAvailInventory

DistributorAddProducttoOrder

CompleteOrder

CancelBooking

AddProducttoInventory

UpdateProductQty

LocateBooking

RedeemBooking

Operator

RemoveProduct

InventoryAPI

FulfillmentAPI

#1 #2`

PointOfSale

ForeveryAPI,ask:“Whatareyourresources?”

Domain-DrivenDesign

ModeldomainobjectstofindbusinessenDDes,relaDons,statetransiDons,andevents

OrderAPI

ListAvailInventory

AddProducttoOrder

CompleteOrder

CancelBooking

AddProducttoInventory

UpdateProductQty

LocateBooking

RedeemBooking

RemoveProduct

InventoryAPI

FulfillmentAPI

OrderAPI

Availabili6es

Orders

Products(Inventory)

Bookings

InventoryAPI

FulfillmentAPI

Samedata,Conceptuallydifferentto

theAPIconsumer!

AvailabiliDes-product

-date(s)avail-qtyavail

Orders-bookings-ordertotal

Products-name

-availschedule

Bookings-product-date(s)-status

AvailabiliDes-product

-date(s)avail-qtyavail

availabilityChanged()

Orders-bookings-ordertotal

created()updated()

Products-name

-availschedule

created()removed()updated()

Bookings-product-date(s)-status

redeemed()cancelled()

PuXngitalltogether

AvailabiliDes-product

-date(s)avail-qtyavail

availabilityChanged()

Orders-bookings-ordertotal

created()updated()

Products-name

-availschedule

created()removed()updated()

Bookings-product-date(s)-status

redeemed()cancelled()

OrderAPI InventoryAPI

FulfillmentAPI

Wheredomicroservicesfit?

AvailabiliDesService

createAvailability()updateAvailability()deleteAvailability()

…availabilityChanged()

OrdersServicecreateOrder()updateOrder()deleteOrder()

…created()updated()

ProductsServicecreateProduct()updateProduct()deleteProduct()

…created()removed()updated()

BookingsServicelookupBooking()redeemBooking()cancelBooking()

…redeemed()cancelled()

OrderAPI InventoryAPI

FulfillmentAPI

OrdersHTTPAPI InventoryHTTPAPI

FulfillmentHTTPAPI

HowdoesyourAPIdesignreflectyourAPIstory?

Thankyou!

JamesHigginbotham

[email protected]@launchany