SlideShare a Scribd company logo
1 of 72
Download to read offline
What Makes a
Great Open API?
  John	
  Musser,	
  ProgrammableWeb	
  
             @johnmusser	
  
              OSCON	
  2012	
  
                       	
  
yea  rs	
  
7	
                  Is	
  
      ,000 	
  AP                 tor ies	
  
 6
               	
  new      s	
  s
   3   ,000
Why does having
  a great API
    matter?
API growth rate
Based on directory of 6,000 web APIs listed at ProgrammableWeb, May 2012
3	
  Months	
  


                                                                         4	
  Months	
  


                                                                     6	
  Months	
  


                                                              9	
  Months	
  


                                                  18	
  Months	
  


                      8	
  Years	
  




               API growth rate
Based on directory of 6,000 web APIs listed at ProgrammableWeb, May 2012
API Billionaires Club
  13 billion API calls / day (May 2011)
  5 billion API calls / day     (April 2010)



  5 billion API calls / day (October 2009)

  1.4 billion API calls / day (May 2012)

  1.1 billion API calls / day (April 2011)

  1 billion API calls / day (May 2012)
  1 billion API calls / day     (Q1 2012)


  1 billion API calls / day     (January 2012)
Apps & devices everywhere
5 Keys to a Great API
       Valuable
       Planned
       Flexible
       Managed
      Supported
5 Keys to a Great API
A valuable service (data, function, audience, )
                                             …




  A plan and a business model
Simple, flexible, easily adopted
    Managed and measured
    Great developer support
Each “key” has
      two sides:
business & technology
   (each supports the other)
Each “key” has
      two sides:
business & technology
       (today’s talk)
ET #1
      I SECR
A   P

       These are really,
       really hard to do
             right
5 Keys to a Great API
       Valuable
       Planned
       Flexible
       Managed
      Supported
Valuable Service
Valuable Data
Valuable Audience
Valuable Function
Valuable Marketplace
Valuable Access
ET #2
      I SECR
A   P

A very valuable service
 hides many API sins
the API Value Corollary
        The API value corollary



               A great API on a bad service
               is lipstick on a pig
5 Keys to a Great API
       Valuable
       Planned
       Flexible
       Managed
      Supported
5 Keys to a Great API
       Valuable
  Planned (designed)
       Flexible
       Managed
      Supported
Your first two design questions
  What is the goal of this API?
           (purpose)
   Who will be using this API?
          (audience)
You’ll make many design choices
What protocol(s) will I support?
                       What data format(s) to provide?
     How will I manage security?
                  Should I use an open source framework?
Which design patterns to use? Hmm, are there any?
                Oh, right, I need to do versioning too…
What’s the price of IBM?
POST	
  /GetStock	
  HTTP/1.1	
                      GET	
  h@p://example.org/stock/IBM	
  
Host:	
  www.example.org	
  
Content-­‐Type:	
  applicaRon/soap+xml	
  
	
  
<?xml	
  version="1.0"?>	
  
<soap:Envelope	
  
xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐
envelope"	
  
soap:encodingStyle="h@p://www.w3.org/
2001/12/soap-­‐encoding">	
  
	
  
<soap:Body	
  xmlns:m="h@p://www.example.org/
stock">	
  
	
  	
  <m:GetStockPrice>	
  
	
  	
  	
  	
  <m:StockName>IBM</m:StockName>	
  
	
  	
  </m:GetStockPrice>	
  
</soap:Body>	
  
</soap:Envelope>	
  
SOAP                                             REST
POST	
  /GetStock	
  HTTP/1.1	
                      GET	
  h@p://example.org/stock/IBM	
  
Host:	
  www.example.org	
  
Content-­‐Type:	
  applicaRon/soap+xml	
  
	
  
<?xml	
  version="1.0"?>	
  
<soap:Envelope	
  
xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐
envelope"	
  
soap:encodingStyle="h@p://www.w3.org/
2001/12/soap-­‐encoding">	
  
	
  
<soap:Body	
  xmlns:m="h@p://www.example.org/
stock">	
  
	
  	
  <m:GetStockPrice>	
  
	
  	
  	
  	
  <m:StockName>IBM</m:StockName>	
  
	
  	
  </m:GetStockPrice>	
  
</soap:Body>	
  
</soap:Envelope>	
  
API protocols and styles
Based on directory of 5,100 web APIs listed at ProgrammableWeb, February 2012
ET #3
      I SECR
A   P

  A great API doesn’t
        just ask
“am I RESTful enough? ”
Daniel Jacobson, Netflix Engineering Blog, July 9, 2012
Daniel Jacobson, Netflix Engineering Blog, July 9, 2012
another moral of that story is…



            A great API
          understands its
             audience
Your audience may <3 SOAP, really




  50+ finance APIs, 5 billion+ calls/month
Data format? It depends…
     XML, JSON, RSS, Atom, YAML,
 iCalendar, CSV, Serialized PHP, HTML,
 PNG, GeoRSS, vCard, Text, RDF, OPML,
     MediaRSS, VML, TV-Anytime,
 hCalendar, FOAF, XSPF, SQL, GML, CDF

       Data formats supported by APIs on ProgrammableWeb, May 2012
What’s the price of IBM?
{	
                                       <?xml	
  version="1.0"?>	
  
	
  	
  	
  	
  "symbol":	
  ”IBM",	
     <soap:Envelope	
  
	
  	
  	
  	
  "price":	
  94.72,	
      xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐
                                          envelope"	
  
}	
  
                                          soap:encodingStyle="h@p://www.w3.org/
                                          2001/12/soap-­‐encoding">	
  
                                          	
  
                                          <soap:Body	
  xmlns:m="h@p://www.example.org/
                                          stock">	
  
                                          	
  	
  <m:GetStockPriceResponse>	
  
                                          	
  	
  	
  	
  <m:Price>34.5</m:Price>	
  
                                          	
  	
  </m:GetStockPriceResponse>	
  
                                          </soap:Body>	
  
                                          	
  
                                          </soap:Envelope>	
  
JSON                                             XML
{	
                                       <?xml	
  version="1.0"?>	
  
	
  	
  	
  	
  "symbol":	
  ”IBM",	
     <soap:Envelope	
  
	
  	
  	
  	
  "price":	
  94.72,	
      xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐
                                          envelope"	
  
}	
  
                                          soap:encodingStyle="h@p://www.w3.org/
                                          2001/12/soap-­‐encoding">	
  
                                          	
  
                                          <soap:Body	
  xmlns:m="h@p://www.example.org/
                                          stock">	
  
                                          	
  	
  <m:GetStockPriceResponse>	
  
                                          	
  	
  	
  	
  <m:Price>34.5</m:Price>	
  
                                          	
  	
  </m:GetStockPriceResponse>	
  
                                          </soap:Body>	
  
                                          	
  
                                          </soap:Envelope>	
  
Percentage of REST APIs supporting JSON
      Based on directory of 5,800 web APIs listed at ProgrammableWeb, May 2012
Want to discuss API design?
       Check out API Craft
  http://groups.google.com/group/api-craft
5 Keys to a Great API
           Valuable
           Planned
   (simple) Flexible (easily adopted)

          Managed
         Supported
API simplicity continuum


Simple                               Complex



  “As simple as possible, but no simpler”
What makes an API flexible?
             Provides choices
        data format, protocol, version

         Gives developer control
   partial queries & updates, batch operations

         Offers advanced options
         webhooks, streaming, caching
What’s your TTFHW?
    Time To First “Hello World”
    aka: how long from zero to 60?
6 ways to accelerate TTFHW
#1) Make it clear what you do
#2) Offer “Free” or “Trial” API access
(or, even both free & trial)
#3) Fast, automated signup



             (so fast, you can even skip this
             step till you’re convinced…)
#4) Clear, accurate documentation
#5) Copious code samples
Stripe’s dashboard
                                     #6) Provide tools
                                              Google’s
                                              OAuth
                                              Playground
     Wordnik’s Swagger & Mashery’s I/O Docs



                                              Apigee’s API console

Twilio’s debugger
5 Keys to a Great API
       Valuable
       Planned
       Flexible
       Managed (and measured)
      Supported
What to manage & measure?
  Manage           Measure
  Security         Performance
  Key management   Developers and apps
  Monitoring       Quality
  Reporting        Marketing
  Scaling          Revenue
  Rate limiting    Volume
  Versioning       Trends
API versioning in REST
Where	
                        What	
               Who	
            Example	
  
Path	
  segment	
              Date	
               Twilio	
         /2010-­‐04-­‐01/…	
  
Path	
  segment	
              Number	
             Twi@er	
         /1/…	
  
Path	
  segment	
              ‘v’	
  +	
  Number	
   LinkedIn	
     /v1/…	
  
Query	
  string	
              Number	
             Google	
         ?v=2	
  
Custom	
  HTTP	
  header	
   Number	
               Google	
         GData-­‐Version:	
  2	
  
HTTP	
  Accept	
  header	
     Number	
             Github	
         applicaRon/vnd.github[.version]	
  
ET #4
      I SECR
A   P

It matters less how you
   version than you do
         version
API security baseline
Today:
SSL as option
OAuth 2.0 (one of the few API standards with traction)
Future:
SSL required (many major APIs moving to SSL only)
OpenID Connect (it’s very early today)
Great APIs get measured
       Great APIs get measured
Metrics that matter
 Traffic            Developers          Service
                     Total developers    Performance
  Total calls
                    Active developers     Availability
 Top methods
                      Top developers      Error rates
  Call chains
                       Trending apps     Code defects
 Quota faults
                         Retention


Marketing            Support            Business
Dev registrations                        Direct revenue
                      Support tickets   Indirect revenue
Dev portal funnel
                      Response times      Market share
 Traffic sources
                    Community metrics         Costs
 Event metrics
ET #5
      I SECR
A   P

    Great APIs prioritize
     what they want to
          measure
“The absence of
limitations is the
  enemy of art”
             Orson Welles
5 Keys to a Great API
       Valuable
       Planned
       Flexible
      Managed
      Supported
What makes an API supported?
      Great developer experience (DX)
  signup, guides, reference, SDKs, pricing, clear ToS

         Communication & community
     forum, blog, social media, email, app gallery

      Great support / evangelism teams
   active, engaged, listening, responding, at events
What makes an API supported?
    Great developer experience (DX)
              	
  
        A   nd reference, SDKs, pricing, legal
                               g	
  
   Signup, guides,
                      ythin
                er & communityr	
  
          ev
        Communication d	
  un        de
           c        ereemail, events, clear ToS
  forum, blog,ov media,
               social

                       /W
                           	
   teams
     Great supportHevangelism
                TF
             T listening, responding
       active, engaged,
developerexperience.org

                see also
developer-support-handbook.appspot.com
ET #6
      I SECR
A   P

     Great DX separates
     the best APIs from
          the rest
Covering your DX checklist
Does API design impact support?
         Let me count the ways…
 For example, look at Twilio’s error response
Community: a core tenet of great
open APIs and open source
5 Keys to a Great API
       Valuable e	
  
              e	
  m or
 A nd     on
      	
  Planned
    ing     …	
  
          Flexible
 th
      Managed
     Supported
Top 10 API worst practices
  10. Poor error handing
  9. REST APIs that ignore HTTP rules
  8. Exposing your raw underlying data model
  7. Security complexity
  6. Unexpected & undocumented releases
  5. Poor developer experience
  4. Expect an MVC framework ‘gives’ you a great API
  3. Assume if you build it they will come
  2. Inadequate support
  1. Poor documentation
#7
    P I SECR   ET     A great API
A
                     is a journey,
                   not a destination
Thank You

 QuesRons,	
  ideas,	
  comments?
john@programmableweb.com	
  
       @johnmusser	
  
                 	
  
Photo	
  credits	
  
Pig:	
  h@p://www.flickr.com/photos/babasteve/7341687640/	
  
Race	
  car:	
  h@p://www.flickr.com/photos/lim_lik_wei/3270522646/	
  
Stopwatch:	
  h@p://www.flickr.com/photos/purplemapish/3020016417/	
  
Hackers:	
  h@p://www.flickr.com/photos/hackny/5684846071/	
  
Winding	
  road:	
  h@p://www.flickr.com/photos/ma@hewthecoolguy/7518274258/	
  
	
  
	
  

More Related Content

What's hot

Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Edureka!
 
Richardson Maturity and OpenAPI 3.0
Richardson Maturity and OpenAPI 3.0Richardson Maturity and OpenAPI 3.0
Richardson Maturity and OpenAPI 3.0SmartBear
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureNguyen Tung
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaAraf Karsh Hamid
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service MeshJeong-Ho Na
 
Communication in a Microservice Architecture
Communication in a Microservice ArchitectureCommunication in a Microservice Architecture
Communication in a Microservice ArchitecturePer Bernhardt
 
Architecting an Enterprise API Management Strategy
Architecting an Enterprise API Management StrategyArchitecting an Enterprise API Management Strategy
Architecting an Enterprise API Management StrategyWSO2
 
API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)Apigee | Google Cloud
 
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With Rust
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With RustMuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With Rust
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With RustJitendra Bafna
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetesRishabh Indoria
 
How to Execute a Successful API Strategy
How to Execute a Successful API StrategyHow to Execute a Successful API Strategy
How to Execute a Successful API StrategyMatt McLarty
 
Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1SmartBear
 

What's hot (20)

API Presentation
API PresentationAPI Presentation
API Presentation
 
API for Beginners
API for BeginnersAPI for Beginners
API for Beginners
 
Maven Introduction
Maven IntroductionMaven Introduction
Maven Introduction
 
Api types
Api typesApi types
Api types
 
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
 
Richardson Maturity and OpenAPI 3.0
Richardson Maturity and OpenAPI 3.0Richardson Maturity and OpenAPI 3.0
Richardson Maturity and OpenAPI 3.0
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Monitoring Solutions for APIs
Monitoring Solutions for APIsMonitoring Solutions for APIs
Monitoring Solutions for APIs
 
contentful_sec
contentful_seccontentful_sec
contentful_sec
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
API Design- Best Practices
API Design-   Best PracticesAPI Design-   Best Practices
API Design- Best Practices
 
Microservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and KafkaMicroservices Part 3 Service Mesh and Kafka
Microservices Part 3 Service Mesh and Kafka
 
멀티클라우드 Service Mesh
멀티클라우드 Service Mesh멀티클라우드 Service Mesh
멀티클라우드 Service Mesh
 
Communication in a Microservice Architecture
Communication in a Microservice ArchitectureCommunication in a Microservice Architecture
Communication in a Microservice Architecture
 
Architecting an Enterprise API Management Strategy
Architecting an Enterprise API Management StrategyArchitecting an Enterprise API Management Strategy
Architecting an Enterprise API Management Strategy
 
API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)API Maturity Model (Webcast with Accenture)
API Maturity Model (Webcast with Accenture)
 
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With Rust
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With RustMuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With Rust
MuleSoft Surat Meetup#44 - Anypoint Flex Gateway Custom Policies With Rust
 
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
 
How to Execute a Successful API Strategy
How to Execute a Successful API StrategyHow to Execute a Successful API Strategy
How to Execute a Successful API Strategy
 
Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1Introducing OpenAPI Version 3.1
Introducing OpenAPI Version 3.1
 

Similar to What Makes a Great Open API?

Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?John Musser
 
Open APIs and the Semantic Web 2011
Open APIs and the Semantic Web 2011Open APIs and the Semantic Web 2011
Open APIs and the Semantic Web 2011John Musser
 
API Management Workshop (at Startupbootcamp Berlin)
API Management Workshop (at Startupbootcamp Berlin)API Management Workshop (at Startupbootcamp Berlin)
API Management Workshop (at Startupbootcamp Berlin)3scale
 
Open API Ecosystem Overview: December 2010
Open API Ecosystem Overview: December 2010Open API Ecosystem Overview: December 2010
Open API Ecosystem Overview: December 2010John Musser
 
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine CheronAPIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine Cheronapidays
 
LAJUG Napster REST API
LAJUG Napster REST APILAJUG Napster REST API
LAJUG Napster REST APIstephenbhadran
 
Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?John Musser
 
Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Twilio Inc
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010Twilio Inc
 
Open Ap Is State Of The Market
Open Ap Is State Of The MarketOpen Ap Is State Of The Market
Open Ap Is State Of The MarketConSanFrancisco123
 
Frequently asked MuleSoft Interview Questions and Answers from Techlightning
Frequently asked MuleSoft Interview Questions and Answers from TechlightningFrequently asked MuleSoft Interview Questions and Answers from Techlightning
Frequently asked MuleSoft Interview Questions and Answers from TechlightningArul ChristhuRaj Alphonse
 
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...Indus Khaitan
 
RESTful API-centric Universe
RESTful API-centric UniverseRESTful API-centric Universe
RESTful API-centric UniverseTihomir Opačić
 
Generating Insights from WSO2 API Manager Statistics
Generating Insights from WSO2 API Manager StatisticsGenerating Insights from WSO2 API Manager Statistics
Generating Insights from WSO2 API Manager StatisticsWSO2
 
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018Amazon Web Services Korea
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grailsclatimer
 
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadOpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadTed Epstein
 

Similar to What Makes a Great Open API? (20)

What Makes a Great Open API?
What Makes a Great Open API?What Makes a Great Open API?
What Makes a Great Open API?
 
Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?
 
Open APIs and the Semantic Web 2011
Open APIs and the Semantic Web 2011Open APIs and the Semantic Web 2011
Open APIs and the Semantic Web 2011
 
API Management Workshop (at Startupbootcamp Berlin)
API Management Workshop (at Startupbootcamp Berlin)API Management Workshop (at Startupbootcamp Berlin)
API Management Workshop (at Startupbootcamp Berlin)
 
Open API Ecosystem Overview: December 2010
Open API Ecosystem Overview: December 2010Open API Ecosystem Overview: December 2010
Open API Ecosystem Overview: December 2010
 
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine CheronAPIdays Paris 2019 Backend is the new frontend by Antoine Cheron
APIdays Paris 2019 Backend is the new frontend by Antoine Cheron
 
LAJUG Napster REST API
LAJUG Napster REST APILAJUG Napster REST API
LAJUG Napster REST API
 
Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?Open APIs: What's Hot, What's Not?
Open APIs: What's Hot, What's Not?
 
Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011Building a Great Web API - Evan Cooke - QCON 2011
Building a Great Web API - Evan Cooke - QCON 2011
 
Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010Building A Great API - Evan Cooke, Cloudstock, December 2010
Building A Great API - Evan Cooke, Cloudstock, December 2010
 
Open Ap Is State Of The Market
Open Ap Is State Of The MarketOpen Ap Is State Of The Market
Open Ap Is State Of The Market
 
Frequently asked MuleSoft Interview Questions and Answers from Techlightning
Frequently asked MuleSoft Interview Questions and Answers from TechlightningFrequently asked MuleSoft Interview Questions and Answers from Techlightning
Frequently asked MuleSoft Interview Questions and Answers from Techlightning
 
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...
Creating Interactive Olap Applications With My Sql Enterprise And Mondrian Pr...
 
RESTful API-centric Universe
RESTful API-centric UniverseRESTful API-centric Universe
RESTful API-centric Universe
 
Generating Insights from WSO2 API Manager Statistics
Generating Insights from WSO2 API Manager StatisticsGenerating Insights from WSO2 API Manager Statistics
Generating Insights from WSO2 API Manager Statistics
 
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018
Lambda@Edge를통한멀티리전기반글로벌트래픽길들이기::이상현::AWS Summit Seoul 2018
 
Building Awesome APIs in Grails
Building Awesome APIs in GrailsBuilding Awesome APIs in Grails
Building Awesome APIs in Grails
 
Api manager preconference
Api manager preconferenceApi manager preconference
Api manager preconference
 
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road AheadOpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
OpenAPI v.Next - Events, Alternative Schemas & the Road Ahead
 
CSG 2012
CSG 2012CSG 2012
CSG 2012
 

More from John Musser

Why API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsWhy API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsJohn Musser
 
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...John Musser
 
Ten Reasons Developers Hate Your API
Ten Reasons Developers Hate Your APITen Reasons Developers Hate Your API
Ten Reasons Developers Hate Your APIJohn Musser
 
API Business Models
API Business ModelsAPI Business Models
API Business ModelsJohn Musser
 
Open APIs - State of the Market 2011
Open APIs - State of the Market 2011Open APIs - State of the Market 2011
Open APIs - State of the Market 2011John Musser
 
Open APIs: State of the Market, May 2010
Open APIs: State of the Market, May 2010Open APIs: State of the Market, May 2010
Open APIs: State of the Market, May 2010John Musser
 

More from John Musser (6)

Why API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOpsWhy API Ops is the Next Wave of DevOps
Why API Ops is the Next Wave of DevOps
 
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...
KPIs for APIs (and how API Calls are the new Web Hits, and you may be measuri...
 
Ten Reasons Developers Hate Your API
Ten Reasons Developers Hate Your APITen Reasons Developers Hate Your API
Ten Reasons Developers Hate Your API
 
API Business Models
API Business ModelsAPI Business Models
API Business Models
 
Open APIs - State of the Market 2011
Open APIs - State of the Market 2011Open APIs - State of the Market 2011
Open APIs - State of the Market 2011
 
Open APIs: State of the Market, May 2010
Open APIs: State of the Market, May 2010Open APIs: State of the Market, May 2010
Open APIs: State of the Market, May 2010
 

Recently uploaded

Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IES VE
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?IES VE
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Will Schroeder
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesMd Hossain Ali
 

Recently uploaded (20)

Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
IESVE Software for Florida Code Compliance Using ASHRAE 90.1-2019
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?How Accurate are Carbon Emissions Projections?
How Accurate are Carbon Emissions Projections?
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
Apres-Cyber - The Data Dilemma: Bridging Offensive Operations and Machine Lea...
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just MinutesAI Fame Rush Review – Virtual Influencer Creation In Just Minutes
AI Fame Rush Review – Virtual Influencer Creation In Just Minutes
 

What Makes a Great Open API?

  • 1. What Makes a Great Open API? John  Musser,  ProgrammableWeb   @johnmusser   OSCON  2012    
  • 2. yea rs   7   Is   ,000  AP tor ies   6  new s  s 3 ,000
  • 3. Why does having a great API matter?
  • 4. API growth rate Based on directory of 6,000 web APIs listed at ProgrammableWeb, May 2012
  • 5. 3  Months   4  Months   6  Months   9  Months   18  Months   8  Years   API growth rate Based on directory of 6,000 web APIs listed at ProgrammableWeb, May 2012
  • 6. API Billionaires Club 13 billion API calls / day (May 2011) 5 billion API calls / day (April 2010) 5 billion API calls / day (October 2009) 1.4 billion API calls / day (May 2012) 1.1 billion API calls / day (April 2011) 1 billion API calls / day (May 2012) 1 billion API calls / day (Q1 2012) 1 billion API calls / day (January 2012)
  • 7. Apps & devices everywhere
  • 8. 5 Keys to a Great API Valuable Planned Flexible Managed Supported
  • 9. 5 Keys to a Great API A valuable service (data, function, audience, ) … A plan and a business model Simple, flexible, easily adopted Managed and measured Great developer support
  • 10. Each “key” has two sides: business & technology (each supports the other)
  • 11. Each “key” has two sides: business & technology (today’s talk)
  • 12. ET #1 I SECR A P These are really, really hard to do right
  • 13. 5 Keys to a Great API Valuable Planned Flexible Managed Supported
  • 20. ET #2 I SECR A P A very valuable service hides many API sins
  • 21. the API Value Corollary The API value corollary A great API on a bad service is lipstick on a pig
  • 22. 5 Keys to a Great API Valuable Planned Flexible Managed Supported
  • 23. 5 Keys to a Great API Valuable Planned (designed) Flexible Managed Supported
  • 24. Your first two design questions What is the goal of this API? (purpose) Who will be using this API? (audience)
  • 25. You’ll make many design choices What protocol(s) will I support? What data format(s) to provide? How will I manage security? Should I use an open source framework? Which design patterns to use? Hmm, are there any? Oh, right, I need to do versioning too…
  • 26. What’s the price of IBM? POST  /GetStock  HTTP/1.1   GET  h@p://example.org/stock/IBM   Host:  www.example.org   Content-­‐Type:  applicaRon/soap+xml     <?xml  version="1.0"?>   <soap:Envelope   xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐ envelope"   soap:encodingStyle="h@p://www.w3.org/ 2001/12/soap-­‐encoding">     <soap:Body  xmlns:m="h@p://www.example.org/ stock">      <m:GetStockPrice>          <m:StockName>IBM</m:StockName>      </m:GetStockPrice>   </soap:Body>   </soap:Envelope>  
  • 27. SOAP REST POST  /GetStock  HTTP/1.1   GET  h@p://example.org/stock/IBM   Host:  www.example.org   Content-­‐Type:  applicaRon/soap+xml     <?xml  version="1.0"?>   <soap:Envelope   xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐ envelope"   soap:encodingStyle="h@p://www.w3.org/ 2001/12/soap-­‐encoding">     <soap:Body  xmlns:m="h@p://www.example.org/ stock">      <m:GetStockPrice>          <m:StockName>IBM</m:StockName>      </m:GetStockPrice>   </soap:Body>   </soap:Envelope>  
  • 28. API protocols and styles Based on directory of 5,100 web APIs listed at ProgrammableWeb, February 2012
  • 29. ET #3 I SECR A P A great API doesn’t just ask “am I RESTful enough? ”
  • 30. Daniel Jacobson, Netflix Engineering Blog, July 9, 2012
  • 31. Daniel Jacobson, Netflix Engineering Blog, July 9, 2012
  • 32. another moral of that story is… A great API understands its audience
  • 33. Your audience may <3 SOAP, really 50+ finance APIs, 5 billion+ calls/month
  • 34. Data format? It depends… XML, JSON, RSS, Atom, YAML, iCalendar, CSV, Serialized PHP, HTML, PNG, GeoRSS, vCard, Text, RDF, OPML, MediaRSS, VML, TV-Anytime, hCalendar, FOAF, XSPF, SQL, GML, CDF Data formats supported by APIs on ProgrammableWeb, May 2012
  • 35. What’s the price of IBM? {   <?xml  version="1.0"?>          "symbol":  ”IBM",   <soap:Envelope          "price":  94.72,   xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐ envelope"   }   soap:encodingStyle="h@p://www.w3.org/ 2001/12/soap-­‐encoding">     <soap:Body  xmlns:m="h@p://www.example.org/ stock">      <m:GetStockPriceResponse>          <m:Price>34.5</m:Price>      </m:GetStockPriceResponse>   </soap:Body>     </soap:Envelope>  
  • 36. JSON XML {   <?xml  version="1.0"?>          "symbol":  ”IBM",   <soap:Envelope          "price":  94.72,   xmlns:soap="h@p://www.w3.org/2001/12/soap-­‐ envelope"   }   soap:encodingStyle="h@p://www.w3.org/ 2001/12/soap-­‐encoding">     <soap:Body  xmlns:m="h@p://www.example.org/ stock">      <m:GetStockPriceResponse>          <m:Price>34.5</m:Price>      </m:GetStockPriceResponse>   </soap:Body>     </soap:Envelope>  
  • 37. Percentage of REST APIs supporting JSON Based on directory of 5,800 web APIs listed at ProgrammableWeb, May 2012
  • 38. Want to discuss API design? Check out API Craft http://groups.google.com/group/api-craft
  • 39. 5 Keys to a Great API Valuable Planned (simple) Flexible (easily adopted) Managed Supported
  • 40. API simplicity continuum Simple Complex “As simple as possible, but no simpler”
  • 41. What makes an API flexible? Provides choices data format, protocol, version Gives developer control partial queries & updates, batch operations Offers advanced options webhooks, streaming, caching
  • 42. What’s your TTFHW? Time To First “Hello World” aka: how long from zero to 60?
  • 43. 6 ways to accelerate TTFHW
  • 44. #1) Make it clear what you do
  • 45. #2) Offer “Free” or “Trial” API access
  • 46. (or, even both free & trial)
  • 47. #3) Fast, automated signup (so fast, you can even skip this step till you’re convinced…)
  • 48. #4) Clear, accurate documentation
  • 49. #5) Copious code samples
  • 50. Stripe’s dashboard #6) Provide tools Google’s OAuth Playground Wordnik’s Swagger & Mashery’s I/O Docs Apigee’s API console Twilio’s debugger
  • 51. 5 Keys to a Great API Valuable Planned Flexible Managed (and measured) Supported
  • 52. What to manage & measure? Manage Measure Security Performance Key management Developers and apps Monitoring Quality Reporting Marketing Scaling Revenue Rate limiting Volume Versioning Trends
  • 53. API versioning in REST Where   What   Who   Example   Path  segment   Date   Twilio   /2010-­‐04-­‐01/…   Path  segment   Number   Twi@er   /1/…   Path  segment   ‘v’  +  Number   LinkedIn   /v1/…   Query  string   Number   Google   ?v=2   Custom  HTTP  header   Number   Google   GData-­‐Version:  2   HTTP  Accept  header   Number   Github   applicaRon/vnd.github[.version]  
  • 54. ET #4 I SECR A P It matters less how you version than you do version
  • 55. API security baseline Today: SSL as option OAuth 2.0 (one of the few API standards with traction) Future: SSL required (many major APIs moving to SSL only) OpenID Connect (it’s very early today)
  • 56. Great APIs get measured Great APIs get measured
  • 57. Metrics that matter Traffic Developers Service Total developers Performance Total calls Active developers Availability Top methods Top developers Error rates Call chains Trending apps Code defects Quota faults Retention Marketing Support Business Dev registrations Direct revenue Support tickets Indirect revenue Dev portal funnel Response times Market share Traffic sources Community metrics Costs Event metrics
  • 58. ET #5 I SECR A P Great APIs prioritize what they want to measure
  • 59. “The absence of limitations is the enemy of art” Orson Welles
  • 60. 5 Keys to a Great API Valuable Planned Flexible Managed Supported
  • 61. What makes an API supported? Great developer experience (DX) signup, guides, reference, SDKs, pricing, clear ToS Communication & community forum, blog, social media, email, app gallery Great support / evangelism teams active, engaged, listening, responding, at events
  • 62. What makes an API supported? Great developer experience (DX)   A nd reference, SDKs, pricing, legal g   Signup, guides, ythin er & communityr   ev Communication d  un de c ereemail, events, clear ToS forum, blog,ov media, social /W   teams Great supportHevangelism TF T listening, responding active, engaged,
  • 63. developerexperience.org see also developer-support-handbook.appspot.com
  • 64. ET #6 I SECR A P Great DX separates the best APIs from the rest
  • 65. Covering your DX checklist
  • 66. Does API design impact support? Let me count the ways… For example, look at Twilio’s error response
  • 67. Community: a core tenet of great open APIs and open source
  • 68. 5 Keys to a Great API Valuable e   e  m or A nd on  Planned ing …   Flexible th Managed Supported
  • 69. Top 10 API worst practices 10. Poor error handing 9. REST APIs that ignore HTTP rules 8. Exposing your raw underlying data model 7. Security complexity 6. Unexpected & undocumented releases 5. Poor developer experience 4. Expect an MVC framework ‘gives’ you a great API 3. Assume if you build it they will come 2. Inadequate support 1. Poor documentation
  • 70. #7 P I SECR ET A great API A is a journey, not a destination
  • 71. Thank You QuesRons,  ideas,  comments? john@programmableweb.com   @johnmusser    
  • 72. Photo  credits   Pig:  h@p://www.flickr.com/photos/babasteve/7341687640/   Race  car:  h@p://www.flickr.com/photos/lim_lik_wei/3270522646/   Stopwatch:  h@p://www.flickr.com/photos/purplemapish/3020016417/   Hackers:  h@p://www.flickr.com/photos/hackny/5684846071/   Winding  road:  h@p://www.flickr.com/photos/ma@hewthecoolguy/7518274258/