SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
APIs	Are	Forever:	
How	to	Design	Long-Las6ng	APIs	
James	Higginbotham	
API	Architect	
@launchany
Your	API	tells	a	story.	
What	story	does	yours	tell?
If	your	API	is	the	story,	
you	are	doing	it	wrong.
Do	we	create	one	API	product?	
More	than	one	product?	
How	can	we	prevent	a	redesign?
Architecture	is	design
Web	APIs	are	an	architectural	
concern	that	expose	an	interface	to	
an	underlying	system.		
Design	them	to	tell	your	story.
“We	have	a	monolithic	app,	but	we	
are	in	the	process	of	rearchitecDng	
it	using	microservices	and	APIs.”	
	
--	anyone	where	code.age	>=	3	months
Why	do	we	have		
“monolithic	regret”	and	how	
can	we	avoid	it?
Lack	of	Modulariza6on	=	Regret	
VS	
Func6on-Based	 Module-Based
(Re)Introducing	Systems	Design	
and	Domain-Driven	Design
Modeling	a	System	
System/Solu6on	
Subsystem	 Subsystem	
Module	 Module	
Module	 Module	
Subsystem	 Subsystem	
Module	 Module
The	System	of	LEGO	
System	
Sub-systems	
Modules
“Your	API	design	should	become	
the	definiDon	of	your	new	
target	architecture“	-	@jharmn
MulD-Sided	Marketplace	
PlaRorm	API	Example
List	Avail	
Inventory	
Distributor	
Add	Product	
to	Order	
Complete	
Order	
Cancel	
Booking	
Add	Product	
to	Inventory	
Update	
Product	Qty	
Locate	
Booking	
Redeem	
Booking	
Point	
Of	Sale	
Remove	
Product	
Customer	
Operator	
Operator
Order	Mgmt	
List	Avail	
Inventory	
Distributor	
Add	Product	
to	Order	
Complete	
Order	
Cancel	
Booking	
Add	Product	
to	Inventory	
Update	
Product	Qty	
Locate	
Booking	
Redeem	
Booking	
Operator	
Point	
Of	Sale	
Remove	
Product	
Customer	
Operator	
Inventory	Mgmt	
Fulfillment
Each	subsystem	has	an	API	that	
exposes	one	or	more	endpoints.
Order	API	
List	Avail	
Inventory	
Distributor	
Add	Product	
to	Order	
Complete	
Order	
Cancel	
Booking	
Add	Product	
to	Inventory	
Update	
Product	Qty	
Locate	
Booking	
Redeem	
Booking	
Point	
Of	Sale	
Remove	
Product	
Customer	
Operator	
Inventory	API	
Fulfillment	API	
Operator
IdenDfying	the	products	
becomes	easier	when	we	have	
boundaries	around	the	APIs
Order	API	
List	Avail	
Inventory	
Distributor	
Add	Product	
to	Order	
Complete	
Order	
Cancel	
Booking	
Add	Product	
to	Inventory	
Update	
Product	Qty	
Locate	
Booking	
Redeem	
Booking	
Operator	
Remove	
Product	
Inventory	API	
Fulfillment	API	
#1	 #2	
`	
Point	
Of	Sale
For	every	API,	ask:		
“What	are	your	resources?”
Domain-Driven	Design
Model	domain	objects	to	find	
business	enDDes,	relaDons,	
state	transiDons,	and	events
Order	API	
List	Avail	
Inventory	
Add	Product	
to	Order	
Complete	
Order	
Cancel	
Booking	
Add	Product	
to	Inventory	
Update	
Product	Qty	
Locate	
Booking	
Redeem	
Booking	
Remove	
Product	
Inventory	API	
Fulfillment	API
Order	API	
Availabili6es	
Orders	
Products	
(Inventory)	
Bookings	
Inventory	API	
Fulfillment	API	
Same	data,		
Conceptually	different	to		
the	API	consumer!
AvailabiliDes	
-	product	
-	date(s)	avail	
-	qty	avail	
	
Orders	
-	bookings	
-	order	total	
Products	
-	name	
-	avail	schedule	
Bookings	
-	product	
-	date(s)	
-	status
AvailabiliDes	
-	product	
-	date(s)	avail	
-	qty	avail	
	
availabilityChanged()	
	
Orders	
-	bookings	
-	order	total	
	
	
created()	
updated()	
Products	
-	name	
-	avail	schedule	
	
	
created()	
removed()	
updated()	
Bookings	
-	product	
-	date(s)	
-	status	
	
redeemed()	
cancelled()
PuXng	it	all	together
AvailabiliDes	
-	product	
-	date(s)	avail	
-	qty	avail	
	
availabilityChanged()	
	
Orders	
-	bookings	
-	order	total	
	
	
created()	
updated()	
Products	
-	name	
-	avail	schedule	
	
	
created()	
removed()	
updated()	
Bookings	
-	product	
-	date(s)	
-	status	
	
redeemed()	
cancelled()	
Order	API	 Inventory	API	
Fulfillment	API
Where	do	microservices	fit?
AvailabiliDes	
Service	
createAvailability()	
updateAvailability	()	
deleteAvailability	()	
…	
availabilityChanged()	
	Orders	Service	
createOrder()	
updateOrder	()	
deleteOrder	()	
…	
created()	
updated()	
Products	Service	
createProduct()	
updateProduct	()	
deleteProduct	()	
…	
created()	
removed()	
updated()	
Bookings	Service	
lookupBooking()	
redeemBooking	()	
cancelBooking	()	
…	
redeemed()	
cancelled()	
Order	API	 Inventory	API	
Fulfillment	API	
Orders	HTTP	API	 Inventory	HTTP	API	
Fulfillment	HTTP	
API
How	does	your	API	design	
reflect	your	API	story?
Thank	you!	
	
James	Higginbotham	
james@launchany.com	
@launchany

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Api types
Api typesApi types
Api types
 
Definitive Guide to API Management
Definitive Guide to API ManagementDefinitive Guide to API Management
Definitive Guide to API Management
 
API Strategy Introduction
API Strategy IntroductionAPI Strategy Introduction
API Strategy Introduction
 
APIsecure 2023 - API orchestration: to build resilient applications, Cherish ...
APIsecure 2023 - API orchestration: to build resilient applications, Cherish ...APIsecure 2023 - API orchestration: to build resilient applications, Cherish ...
APIsecure 2023 - API orchestration: to build resilient applications, Cherish ...
 
Building Modern APIs with GraphQL
Building Modern APIs with GraphQLBuilding Modern APIs with GraphQL
Building Modern APIs with GraphQL
 
Deep dive: Monetize your API Programs
Deep dive: Monetize your API ProgramsDeep dive: Monetize your API Programs
Deep dive: Monetize your API Programs
 
How to GraphQL
How to GraphQLHow to GraphQL
How to GraphQL
 
API as-a-Product with Azure API Management (APIM)
API as-a-Product with Azure API Management (APIM)API as-a-Product with Azure API Management (APIM)
API as-a-Product with Azure API Management (APIM)
 
Applying Domain-Driven Design to APIs and Microservices - Austin API Meetup
Applying Domain-Driven Design to APIs and Microservices  - Austin API MeetupApplying Domain-Driven Design to APIs and Microservices  - Austin API Meetup
Applying Domain-Driven Design to APIs and Microservices - Austin API Meetup
 
API Integration For Building Software Applications Powerpoint Presentation Sl...
API Integration For Building Software Applications Powerpoint Presentation Sl...API Integration For Building Software Applications Powerpoint Presentation Sl...
API Integration For Building Software Applications Powerpoint Presentation Sl...
 
API Governance
API Governance API Governance
API Governance
 
REST API Design & Development
REST API Design & DevelopmentREST API Design & Development
REST API Design & Development
 
How Secure Are Your APIs?
How Secure Are Your APIs?How Secure Are Your APIs?
How Secure Are Your APIs?
 
Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs
 
What's an api
What's an apiWhat's an api
What's an api
 
Architecting an Enterprise API Management Strategy
Architecting an Enterprise API Management StrategyArchitecting an Enterprise API Management Strategy
Architecting an Enterprise API Management Strategy
 
Effective API Design
Effective API DesignEffective API Design
Effective API Design
 
API Management - Why it matters!
API Management - Why it matters!API Management - Why it matters!
API Management - Why it matters!
 
RAML
RAMLRAML
RAML
 
02 api gateway
02 api gateway02 api gateway
02 api gateway
 

Destacado

Analysis and research of system security based on android
Analysis and research of system security based on androidAnalysis and research of system security based on android
Analysis and research of system security based on android
Ravishankar Kumar
 

Destacado (6)

Microservices Architecture for MEAN Applications using Serverless AWS
Microservices Architecture for MEAN Applications using Serverless AWSMicroservices Architecture for MEAN Applications using Serverless AWS
Microservices Architecture for MEAN Applications using Serverless AWS
 
Getting Started with Heroku
Getting Started with HerokuGetting Started with Heroku
Getting Started with Heroku
 
No one puts java in the container
No one puts java in the containerNo one puts java in the container
No one puts java in the container
 
Shared information systems
Shared information systemsShared information systems
Shared information systems
 
Analysis and research of system security based on android
Analysis and research of system security based on androidAnalysis and research of system security based on android
Analysis and research of system security based on android
 
JavaOne 2011: Migrating Spring Applications to Java EE 6
JavaOne 2011: Migrating Spring Applications to Java EE 6JavaOne 2011: Migrating Spring Applications to Java EE 6
JavaOne 2011: Migrating Spring Applications to Java EE 6
 

Similar a APIs Are Forever - How to Design Long-Lasting APIs

Similar a APIs Are Forever - How to Design Long-Lasting APIs (20)

Creating Datadipity
Creating DatadipityCreating Datadipity
Creating Datadipity
 
API:World 2016 - Applying Domain Driven Design to APIs and Microservices
API:World 2016 - Applying Domain Driven Design to APIs and MicroservicesAPI:World 2016 - Applying Domain Driven Design to APIs and Microservices
API:World 2016 - Applying Domain Driven Design to APIs and Microservices
 
Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1Clickslide Datadipity Beta V1
Clickslide Datadipity Beta V1
 
apidays Singapore 2023 - Beyond REST, Claudio Tag, IBM
apidays Singapore 2023 - Beyond REST, Claudio Tag, IBMapidays Singapore 2023 - Beyond REST, Claudio Tag, IBM
apidays Singapore 2023 - Beyond REST, Claudio Tag, IBM
 
Your API is your Product - Arun Ravindran, Unisys
Your API is your Product - Arun Ravindran, UnisysYour API is your Product - Arun Ravindran, Unisys
Your API is your Product - Arun Ravindran, Unisys
 
APIs: the Glue of Cloud Computing
APIs: the Glue of Cloud ComputingAPIs: the Glue of Cloud Computing
APIs: the Glue of Cloud Computing
 
Designing APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven DesignDesigning APIs and Microservices Using Domain-Driven Design
Designing APIs and Microservices Using Domain-Driven Design
 
Why apis
Why apisWhy apis
Why apis
 
Cloud Elements | State of API Integration Report 2018
Cloud Elements | State of API Integration Report 2018Cloud Elements | State of API Integration Report 2018
Cloud Elements | State of API Integration Report 2018
 
Intro to Azure Api Management - With Cats
Intro to Azure Api Management - With CatsIntro to Azure Api Management - With Cats
Intro to Azure Api Management - With Cats
 
Your Business, as APIs Leveraging Abstractions to Drive the Experience Economy
Your Business, as APIs  Leveraging Abstractions to Drive the Experience Economy Your Business, as APIs  Leveraging Abstractions to Drive the Experience Economy
Your Business, as APIs Leveraging Abstractions to Drive the Experience Economy
 
API Trends: What to expect in 2012
API Trends: What to expect in 2012API Trends: What to expect in 2012
API Trends: What to expect in 2012
 
apidays Helsinki & North 2023 - API Security in the era of Generative AI, Mat...
apidays Helsinki & North 2023 - API Security in the era of Generative AI, Mat...apidays Helsinki & North 2023 - API Security in the era of Generative AI, Mat...
apidays Helsinki & North 2023 - API Security in the era of Generative AI, Mat...
 
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptxAPI Product Opportunity Responsibility Nicolas Sierro 2015.pptx
API Product Opportunity Responsibility Nicolas Sierro 2015.pptx
 
Want to integrate your business phone system or contact center with your CRM?
Want to integrate your business phone system or contact center with your CRM?Want to integrate your business phone system or contact center with your CRM?
Want to integrate your business phone system or contact center with your CRM?
 
Ibm white paper_harnessing_ap_is_and_platforms_0
Ibm white paper_harnessing_ap_is_and_platforms_0Ibm white paper_harnessing_ap_is_and_platforms_0
Ibm white paper_harnessing_ap_is_and_platforms_0
 
The API SlideShare for Bankers and Fintech Executives
The API SlideShare for Bankers and Fintech ExecutivesThe API SlideShare for Bankers and Fintech Executives
The API SlideShare for Bankers and Fintech Executives
 
Enterprise Integration Patterns Revisited (again) for the Era of Big Data, In...
Enterprise Integration Patterns Revisited (again) for the Era of Big Data, In...Enterprise Integration Patterns Revisited (again) for the Era of Big Data, In...
Enterprise Integration Patterns Revisited (again) for the Era of Big Data, In...
 
How to Make the API Economy a Reality
How to Make the API Economy a RealityHow to Make the API Economy a Reality
How to Make the API Economy a Reality
 
Creating an MVP with Oracle
Creating an MVP with OracleCreating an MVP with Oracle
Creating an MVP with Oracle
 

Más de LaunchAny

Más de LaunchAny (20)

Refining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning EventRefining Your API Design - Architecture and Modeling Learning Event
Refining Your API Design - Architecture and Modeling Learning Event
 
Event-Based API Patterns and Practices
Event-Based API Patterns and PracticesEvent-Based API Patterns and Practices
Event-Based API Patterns and Practices
 
Event-based API Patterns and Practices - AsyncAPI Online Conference
Event-based API Patterns and Practices - AsyncAPI Online ConferenceEvent-based API Patterns and Practices - AsyncAPI Online Conference
Event-based API Patterns and Practices - AsyncAPI Online Conference
 
GlueCon 2019: Beyond REST - Moving to Event-Based APIs and Streaming
GlueCon 2019: Beyond REST - Moving to Event-Based APIs and StreamingGlueCon 2019: Beyond REST - Moving to Event-Based APIs and Streaming
GlueCon 2019: Beyond REST - Moving to Event-Based APIs and Streaming
 
Austin API Summit 2019 - APIs, Microservices, and Serverless: The Shape of Th...
Austin API Summit 2019 - APIs, Microservices, and Serverless: The Shape of Th...Austin API Summit 2019 - APIs, Microservices, and Serverless: The Shape of Th...
Austin API Summit 2019 - APIs, Microservices, and Serverless: The Shape of Th...
 
APIStrat Keynote: Lessons in Transforming the Enterprise to an API Platform
APIStrat Keynote: Lessons in Transforming the Enterprise to an API PlatformAPIStrat Keynote: Lessons in Transforming the Enterprise to an API Platform
APIStrat Keynote: Lessons in Transforming the Enterprise to an API Platform
 
Austin API Summit 2018: Are REST APIs Still Relevant Today?
Austin API Summit 2018: Are REST APIs Still Relevant Today?Austin API Summit 2018: Are REST APIs Still Relevant Today?
Austin API Summit 2018: Are REST APIs Still Relevant Today?
 
GlueCon 2018: Are REST APIs Still Relevant Today?
GlueCon 2018: Are REST APIs Still Relevant Today?GlueCon 2018: Are REST APIs Still Relevant Today?
GlueCon 2018: Are REST APIs Still Relevant Today?
 
Lessons in Transforming the Enterprise to an API Platform
Lessons in Transforming the Enterprise to an API PlatformLessons in Transforming the Enterprise to an API Platform
Lessons in Transforming the Enterprise to an API Platform
 
APIStrat 2017: API Design in the Age of Bots, IoT, and Voice
APIStrat 2017: API Design in the Age of Bots, IoT, and VoiceAPIStrat 2017: API Design in the Age of Bots, IoT, and Voice
APIStrat 2017: API Design in the Age of Bots, IoT, and Voice
 
API Design in the Age of Bots, IoT, and Voice
API Design in the Age of Bots, IoT, and VoiceAPI Design in the Age of Bots, IoT, and Voice
API Design in the Age of Bots, IoT, and Voice
 
APIStrat 2016: Moving Toward a Modular Enterprise
APIStrat 2016: Moving Toward a Modular EnterpriseAPIStrat 2016: Moving Toward a Modular Enterprise
APIStrat 2016: Moving Toward a Modular Enterprise
 
Moving Toward a Modular Enterprise - All About the API Conference 2016
Moving Toward a Modular Enterprise - All About the API Conference 2016Moving Toward a Modular Enterprise - All About the API Conference 2016
Moving Toward a Modular Enterprise - All About the API Conference 2016
 
API Thinking - How to Design APIs Through Systems Design
API Thinking - How to Design APIs Through Systems DesignAPI Thinking - How to Design APIs Through Systems Design
API Thinking - How to Design APIs Through Systems Design
 
Swagger 2.0: Latest and Greatest
Swagger 2.0: Latest and GreatestSwagger 2.0: Latest and Greatest
Swagger 2.0: Latest and Greatest
 
Gluecon 2015 Recap
Gluecon 2015 RecapGluecon 2015 Recap
Gluecon 2015 Recap
 
Using Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in RubyUsing Sinatra to Build REST APIs in Ruby
Using Sinatra to Build REST APIs in Ruby
 
Microservices on the Edge
Microservices on the EdgeMicroservices on the Edge
Microservices on the Edge
 
How to Design and Build a Great Web API
How to Design and Build a Great Web APIHow to Design and Build a Great Web API
How to Design and Build a Great Web API
 
Moving From API Design to Deployment
Moving From API Design to DeploymentMoving From API Design to Deployment
Moving From API Design to Deployment
 

Último

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Último (20)

Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
SHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions PresentationSHRMPro HRMS Software Solutions Presentation
SHRMPro HRMS Software Solutions Presentation
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

APIs Are Forever - How to Design Long-Lasting APIs