SlideShare a Scribd company logo
How (not) to write an API

                              Jakub Nešetřil



Wednesday, September 26, 12
apiary.io

Wednesday, September 26, 12
API?




                                                                                  apiary.io
                                source: http://www.flickr.com/photos/21496790@N06/5065834411
Wednesday, September 26, 12
API?




                                                                                   apiary.io
                                     source: http://www.flickr.com/photos/daddo83/3406962115/
Wednesday, September 26, 12
API?




                                                                                       apiary.io
                                     source: http://www.flickr.com/photos/ecstaticist/3570660643/
Wednesday, September 26, 12
RPC




                                                                                  apiary.io
                                source: http://www.flickr.com/photos/jasleen_kaur/5075553223
Wednesday, September 26, 12
<?xml version="1.0"?>
  <methodCall>
    <methodName>examples.getUser</methodName>
    <params>
      <param>
          <value><i4>102</i4></value>
      </param>
    </params>
  </methodCall>



  <?xml version="1.0"?>
  <methodResponse>
    <params>
      <param>
          <value><string>John Doe</string></value>
      </param>
    </params>
  </methodResponse>

                                                     apiary.io

Wednesday, September 26, 12
SOAP




                                                                                   apiary.io
                                 source: http://www.flickr.com/photos/jasleen_kaur/5075553223
Wednesday, September 26, 12
POST /InStock HTTP/1.1
  Host: www.example.org
  Content-Type: application/soap+xml; charset=utf-8
  Content-Length: 299
  SOAPAction: "http://www.w3.org/2003/05/soap-envelope"

  <?xml version="1.0"?>
  <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
    <soap:Header>
    </soap:Header>
    <soap:Body>
      <m:GetUser xmlns:m="http://www.example.org/user">
        <m:Name>John Doe</m:Name>
      </m:GetUser>
    </soap:Body>
  </soap:Envelope>




                                                                 apiary.io

Wednesday, September 26, 12
REST




                                                                                   apiary.io
                                     source: http://www.flickr.com/photos/tambako/6992962266/
Wednesday, September 26, 12
GET /users/?name=John%20Doe HTTP/1.1
  Content-Type: application/json; charset=utf-8




  200 OK

  [{
       name: {
         first: "John",
         last: "Doe"
       }
  }]




                                                  apiary.io

Wednesday, September 26, 12
POPULAR




                                                                                     apiary.io
                                   source: http://www.flickr.com/photos/keithallison/6327068376
Wednesday, September 26, 12
NO PROTOCOL




                                                                                       apiary.io
                                    source: http://www.flickr.com/photos/24298372@N04/3370859327/
Wednesday, September 26, 12
ORTHODOX BELIEVERS




                                                                                  apiary.io
                               source: http://www.flickr.com/photos/45818813@N05/4785640636/
Wednesday, September 26, 12
PURITY WARS




                                                                                       apiary.io
                                    source: http://www.flickr.com/photos/davidkingham/3661515844/
Wednesday, September 26, 12
HOW TO WRITE AN API?




                                                                                 apiary.io
                               source: http://www.flickr.com/photos/21496790@N06/5065834411
Wednesday, September 26, 12
EVERY API IS DIFFERENT



                                                                                 apiary.io
                               source: http://www.flickr.com/photos/marinacast/2255974192/
Wednesday, September 26, 12
Latency?




                                         apiary.io

Wednesday, September 26, 12
Mobile?


                              Latency?




                                            apiary.io

Wednesday, September 26, 12
s?       Mobile?
                         ox ie
                       Pr

                                    Latency?




                                                  apiary.io

Wednesday, September 26, 12
s?       Mobile?
                         ox ie
                       Pr                    Caching
                                                    ?
                                    Latency?




                                                        apiary.io

Wednesday, September 26, 12
s?       Mobile?
                         ox ie
                       Pr                    Caching
                                                    ?
                                    Latency?

                                           Interactive?

                                                          apiary.io

Wednesday, September 26, 12
s?       Mobile?
                         ox ie
                       Pr                    Caching
                                                    ?
                                    Latency?

                                           Interactive?
                   Data size?

                                                          apiary.io

Wednesday, September 26, 12
apiary.io
                              source: http://www.flickr.com/photos/freeflyer09/7460144118
Wednesday, September 26, 12
EXPERIMENT




                                                                                   apiary.io
                                     source: http://www.flickr.com/photos/samipii/7590121284/
Wednesday, September 26, 12
apiary.io
                              source: http://www.flickr.com/photos/samipii/7590121284/
Wednesday, September 26, 12
RESULTS




                                                                                    apiary.io
                                  source: http://www.flickr.com/photos/eisenbahner/3697448759/
Wednesday, September 26, 12
Mock > Use > Implement




                                                       apiary.io

Wednesday, September 26, 12
Mock > Use > Implement




                                                       apiary.io

Wednesday, September 26, 12
apiary.io

Wednesday, September 26, 12
Mock > Use > Implement




                                                       apiary.io

Wednesday, September 26, 12
Documentation
      Automated Testing


                              Mock > Use > Implement




                                                       apiary.io

Wednesday, September 26, 12
source: http://www.flickr.com/photos/lorenia/3464878271/
Wednesday, September 26, 12
Q&A
                              E-MAIL   jakub@apiary.io   TWITTER   @apiaryio




Wednesday, September 26, 12

More Related Content

PPTX
Servicios médicos
PDF
Art of Building APIs
KEY
REST API tools
PDF
Jakub Vrána: Code Reviews with Phabricator
PDF
Jaroslav Šnajdr: Getting a Business Collaboration Service Into Cloud: A Case ...
PDF
Steve Corona: Scaling LAMP doesn't have to suck
PDF
Adii Pienaar: Lessons learnt running a global startup from the edge of the world
PPT
Patrick Zandl: Energy industry post Edison, Křižík & IoT
Servicios médicos
Art of Building APIs
REST API tools
Jakub Vrána: Code Reviews with Phabricator
Jaroslav Šnajdr: Getting a Business Collaboration Service Into Cloud: A Case ...
Steve Corona: Scaling LAMP doesn't have to suck
Adii Pienaar: Lessons learnt running a global startup from the edge of the world
Patrick Zandl: Energy industry post Edison, Křižík & IoT

More from WebExpo (20)

PPTX
Ameya Kanitkar: Using Hadoop and HBase to Personalize Web, Mobile and Email E...
PPTX
Marli Mesibov - What's in a Story?
PDF
Tomáš Procházka: Moje zápisky z designu
PDF
Jiří Knesl: Souboj frameworků
PPTX
Richard Fridrich: Buď punkový konzument!
PDF
Michal Blažej: Zbavte sa account managementu
PDF
Denisa Lorencová: UX Designer - Anděl s ďáblem v těle
PDF
Petr Ludwig: Jak bojovat s prokrastinací?
PDF
Jan Vlček: Gamifikace 101
PDF
Luke Wroblewski: Mobile First
PDF
Adam Hrubý: Evoluce designéra
PDF
Jan Sotorník: Grafika e-shopu jako sexy a chytrá prodavačka
PDF
Jana Štěpánová: Neziskovky Goes Web
PDF
Douglas Crockford: Serversideness
PPTX
Richard Fridrich: 5 x *, * a */5
PDF
Jiří Močička: Design as Storytelling
PDF
David Hussman - Products and People over Process and Dogma
PDF
Petr Dvořák: Mobilní webové služby pohledem iPhone developera
PPTX
Martin Hujer: PHP ve Windows Azure cloudu
PPTX
Lukáš Zaplatílek: Kašlete na uživatele
Ameya Kanitkar: Using Hadoop and HBase to Personalize Web, Mobile and Email E...
Marli Mesibov - What's in a Story?
Tomáš Procházka: Moje zápisky z designu
Jiří Knesl: Souboj frameworků
Richard Fridrich: Buď punkový konzument!
Michal Blažej: Zbavte sa account managementu
Denisa Lorencová: UX Designer - Anděl s ďáblem v těle
Petr Ludwig: Jak bojovat s prokrastinací?
Jan Vlček: Gamifikace 101
Luke Wroblewski: Mobile First
Adam Hrubý: Evoluce designéra
Jan Sotorník: Grafika e-shopu jako sexy a chytrá prodavačka
Jana Štěpánová: Neziskovky Goes Web
Douglas Crockford: Serversideness
Richard Fridrich: 5 x *, * a */5
Jiří Močička: Design as Storytelling
David Hussman - Products and People over Process and Dogma
Petr Dvořák: Mobilní webové služby pohledem iPhone developera
Martin Hujer: PHP ve Windows Azure cloudu
Lukáš Zaplatílek: Kašlete na uživatele
Ad

Recently uploaded (20)

PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Machine learning based COVID-19 study performance prediction
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Spectroscopy.pptx food analysis technology
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Approach and Philosophy of On baking technology
PPTX
OMC Textile Division Presentation 2021.pptx
PPTX
1. Introduction to Computer Programming.pptx
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Machine Learning_overview_presentation.pptx
PPT
Teaching material agriculture food technology
Unlocking AI with Model Context Protocol (MCP)
cloud_computing_Infrastucture_as_cloud_p
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Mobile App Security Testing_ A Comprehensive Guide.pdf
A comparative analysis of optical character recognition models for extracting...
Assigned Numbers - 2025 - Bluetooth® Document
Machine learning based COVID-19 study performance prediction
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Group 1 Presentation -Planning and Decision Making .pptx
Programs and apps: productivity, graphics, security and other tools
Spectroscopy.pptx food analysis technology
Accuracy of neural networks in brain wave diagnosis of schizophrenia
SOPHOS-XG Firewall Administrator PPT.pptx
Approach and Philosophy of On baking technology
OMC Textile Division Presentation 2021.pptx
1. Introduction to Computer Programming.pptx
Getting Started with Data Integration: FME Form 101
Machine Learning_overview_presentation.pptx
Teaching material agriculture food technology
Ad

Jakub Nešetřil: Jak (ne)dělat API

  • 1. How (not) to write an API Jakub Nešetřil Wednesday, September 26, 12
  • 3. API? apiary.io source: http://www.flickr.com/photos/21496790@N06/5065834411 Wednesday, September 26, 12
  • 4. API? apiary.io source: http://www.flickr.com/photos/daddo83/3406962115/ Wednesday, September 26, 12
  • 5. API? apiary.io source: http://www.flickr.com/photos/ecstaticist/3570660643/ Wednesday, September 26, 12
  • 6. RPC apiary.io source: http://www.flickr.com/photos/jasleen_kaur/5075553223 Wednesday, September 26, 12
  • 7. <?xml version="1.0"?> <methodCall> <methodName>examples.getUser</methodName> <params> <param> <value><i4>102</i4></value> </param> </params> </methodCall> <?xml version="1.0"?> <methodResponse> <params> <param> <value><string>John Doe</string></value> </param> </params> </methodResponse> apiary.io Wednesday, September 26, 12
  • 8. SOAP apiary.io source: http://www.flickr.com/photos/jasleen_kaur/5075553223 Wednesday, September 26, 12
  • 9. POST /InStock HTTP/1.1 Host: www.example.org Content-Type: application/soap+xml; charset=utf-8 Content-Length: 299 SOAPAction: "http://www.w3.org/2003/05/soap-envelope" <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> </soap:Header> <soap:Body> <m:GetUser xmlns:m="http://www.example.org/user"> <m:Name>John Doe</m:Name> </m:GetUser> </soap:Body> </soap:Envelope> apiary.io Wednesday, September 26, 12
  • 10. REST apiary.io source: http://www.flickr.com/photos/tambako/6992962266/ Wednesday, September 26, 12
  • 11. GET /users/?name=John%20Doe HTTP/1.1 Content-Type: application/json; charset=utf-8 200 OK [{ name: { first: "John", last: "Doe" } }] apiary.io Wednesday, September 26, 12
  • 12. POPULAR apiary.io source: http://www.flickr.com/photos/keithallison/6327068376 Wednesday, September 26, 12
  • 13. NO PROTOCOL apiary.io source: http://www.flickr.com/photos/24298372@N04/3370859327/ Wednesday, September 26, 12
  • 14. ORTHODOX BELIEVERS apiary.io source: http://www.flickr.com/photos/45818813@N05/4785640636/ Wednesday, September 26, 12
  • 15. PURITY WARS apiary.io source: http://www.flickr.com/photos/davidkingham/3661515844/ Wednesday, September 26, 12
  • 16. HOW TO WRITE AN API? apiary.io source: http://www.flickr.com/photos/21496790@N06/5065834411 Wednesday, September 26, 12
  • 17. EVERY API IS DIFFERENT apiary.io source: http://www.flickr.com/photos/marinacast/2255974192/ Wednesday, September 26, 12
  • 18. Latency? apiary.io Wednesday, September 26, 12
  • 19. Mobile? Latency? apiary.io Wednesday, September 26, 12
  • 20. s? Mobile? ox ie Pr Latency? apiary.io Wednesday, September 26, 12
  • 21. s? Mobile? ox ie Pr Caching ? Latency? apiary.io Wednesday, September 26, 12
  • 22. s? Mobile? ox ie Pr Caching ? Latency? Interactive? apiary.io Wednesday, September 26, 12
  • 23. s? Mobile? ox ie Pr Caching ? Latency? Interactive? Data size? apiary.io Wednesday, September 26, 12
  • 24. apiary.io source: http://www.flickr.com/photos/freeflyer09/7460144118 Wednesday, September 26, 12
  • 25. EXPERIMENT apiary.io source: http://www.flickr.com/photos/samipii/7590121284/ Wednesday, September 26, 12
  • 26. apiary.io source: http://www.flickr.com/photos/samipii/7590121284/ Wednesday, September 26, 12
  • 27. RESULTS apiary.io source: http://www.flickr.com/photos/eisenbahner/3697448759/ Wednesday, September 26, 12
  • 28. Mock > Use > Implement apiary.io Wednesday, September 26, 12
  • 29. Mock > Use > Implement apiary.io Wednesday, September 26, 12
  • 31. Mock > Use > Implement apiary.io Wednesday, September 26, 12
  • 32. Documentation Automated Testing Mock > Use > Implement apiary.io Wednesday, September 26, 12
  • 34. Q&A E-MAIL jakub@apiary.io TWITTER @apiaryio Wednesday, September 26, 12