SlideShare a Scribd company logo
1 of 21
Building Consistent
RESTful APIs in a High-
Performance Environment
Yegor Borovikov, Software Architect
Brandon Duncan, Director of Engineering
LinkedIn Corporation
http://blog.linkedin.com/
Topics We’ll Cover

>   Examples of RESTful APIs
       What’s missing?
       Variety versus Uniformity
>   Domain Model as Foundation
       Provides Uniformity
       Allows Flexibility
>   Examples of LinkedIn APIs
>   Using Incentives to Scale
       Some LinkedIn production APIs metrics
>   Q&A
                                                2
Examples of RESTful APIs
What if you want to get a person’s profile?
>   Use one of these…
    http://social.yahooapis.com/v1/user/{guid}/profile
    http://api.linkedin.com/v1/people/{guid}
    http://www.orkut.com/social/rest/people/{guid}/@self
    <?xml version="1.0" encoding="UTF-8"?>
    <person>
     <id>111222</id>
     <first-name>Gertrude</first-name>
     <last-name>Stein</last-name>
     <headline>Author of Tender Buttons</headline>
     <connections total="76">
     …
    </person>



                                                           3
Examples of RESTful APIs
What’s Missing?
>   Ability to get exactly what you need (variety)
       If you need more, may require multiple
        API calls (if they exist)
       If you need less, resources are wasted

>   Consistency of responses (uniformity)
       “Same” object returned by different APIs
        may have different structure
       Once in production, hard to get consistent later



                                                           4
Examples of RESTful APIs
Multiple Calls to Get What You Need
>   Want to get user’s friend’s profile? Do this…
       http://social.yahooapis.com/v1/user/123/connections
<connections yahoo:start="0" yahoo:count="1" yahoo:total="1">
 <connection yahoo:uri="http://social.yahooapis.com/v1/user/123/connection/456?
view=usercard">
   <guid>456</guid>
   <contactId>4</contactId>
 </connection>
</connections>




                                                                                  5
Examples of RESTful APIs
Multiple Calls to Get What You Need
>   … then make second call to get friend’s profile:
    http://social.yahooapis.com/v1/user/456/profile
    <profile yahoo:uri="http://social.yahooapis.com/v1/user/456/profile">
     <guid>456</guid>
     <birthdate>3/3</birthdate>
     <created>2008-08-4T17:13:56Z</created>
     ...
    </profile>

       Latent, redundant data
       Optimization requires stickiness


                                                                            6
Typical Solution
Variety versus Uniformity
>   Solution: introduce another call

>   Desire for variety of responses
    undermines uniformity of requests

>   Leads to RPC-like REST APIs

>   Many APIs + Great Documentation =
    Lots of Reading + Lack of Automation


                                           7
Domain Model as Foundation
Sample Domain Model
/people : Person[]     //   collection of Person resources
   /id : string        //   primary key
   /name : string
   /email : string     //   unique key
   /photo : url
   /best-friend : Person
   /friends : Person[]
   /jobs : Job[]       //   collection of Job resources
      /company : Company
      /title : string
      /start-date : date
      /end-date : date
   …
/companies : Company[]
   /name : string
   /ceo : Person
   …

                                                             8
Domain Model as Foundation
Follow request URL to navigate through your model
>   To get a person’s profile:
    http://api.linkedin.com/v2/people/123
                                                          /people[/id=123]
    <person uri=“urn:linkedin:v2:people/123” key=“123”>      /id
      <id>123</id>                                           /name
      <name>Reid Hoffman</name>                              /email
                                                             /photo
      <email>reid@linkedin.com</email>                       /best-friend
      <best-friend uri=“urn:linkedin:v2:people/456”/>        /friends
      …                                                      /jobs
                                                                /company
    </person>                                                   /title
                                                                /start-date
                                                                /end-date
                                                             …
       Conventional URL in request                       /companies
                                                             /name
       Default representation in response                   /ceo
                                                             …



                                                                              9
Domain Model as Foundation
Fine-grained Request
>   What if you only need certain fields
    (e.g., name and photo)?
    http://api.linkedin.com/v2/people/123:(name,photo)
    <person>
     <name>Reid Hoffman</name>
                                                                /people[/id=123]
     <photo>http://media.linkedin.com/photos/123.jpeg</photo>      /id
    </person>                                                      /name
                                                                   /email
                                                                   /photo
                                                                   /best-friend
                                                                   /friends
                                                                   /jobs
                                                                      /company
                                                                      /title
                                                                      /start-date
                                                                      /end-date
                                                                   …


                                                                                    10
Domain Model as Foundation
Fine-grained Request
>   To get names and photos of one’s friends and
    their best friends:
    …/v2/people/456/friends:(name,photo,best-friend:
     (name,photo))                        /people[/id=456]
                                                                    /id
    <friends total=“66” start=“0”>                                  /name
     <friend uri=“urn:linkedin:v2:people/123” key=“123”>            /email
                                                                    /photo
       <name>Reid Hoffman</name>                                    /best-friend
       <photo>http://media.linkedin.com/photos/123.jpeg</photo>     /friends
       <best-friend uri=“urn:linkedin:v2:people/456” key=“456”>        /123
                                                                         /id
         <name>Brandon Duncan</name>                                     /name
         <photo>http://media.linkedin.com/photos/456.jpeg</photo>        /email
                                                                         /photo
       </best-friend>                                                    /best-friend
     </friend>                                                              /name
     <friend>…</friend>                                                     /photo
                                                                    /jobs
    </friends>                                                      …


                                                                                        11
Domain Model as Foundation
Fine-grained Request
>   Allows client to construct custom calls

>   Better than digging for the closest matching API:
    http://social...com/v1/user/123/profile
    http://social...com/v1/user/123/profile/usercard
    http://social...com/v1/user/123/profile/tinyusercard

>   Allows optimization on the backend



                                                           12
Domain Model as Foundation
Benefits
>   Provides a frame for both request and response
    semantics
>   Still allows for flexible syntax
       Requests – path, query params, matrix params…
       Responses – JSON, XML, POJOs, protobuff…
>   Helps to unify and automate many development
    tasks on both ends
       Request / response creation, parsing, marshalling
       Code (and documentation) generation
       Discovery services

                                                            13
Examples of LinkedIn APIs
HTTP GET - Read

   …/people/email=brandon@gmail.com/friends?sort=name

   …/people/123/friends;sort=name:(name,jobs;sort=start-date)

   …/people:(id,name,photo)?name=page&company=google

   …/people::(123,456)
   …/people::(123,456):(name,photo)




                                                                14
Examples of LinkedIn APIs
HTTP PUT - Update
>   Set the user’s name:                           /people[/id=123]
                                                      /id
                                                      /name
PUT http://api.linkedin.com/v2/people/123/name        /email
<name>Reid Hoffmann</name>                            /photo
                                                      /best-friend
                                                      …

>   Update the user’s profile - change name and best-
    friend and remove photo:
PUT http://api.linkedin.com/v2/people/123
<person>                                           /people[/id=123]
 <name>Reid Hoffman</name>                            /id
                                                      /name
 <best-friend uri=“urn:linkedin:v2:people/999”/>      /email
 <photo xsi:nil=“true”/>                              /photo
</person>                                             /best-friend
                                                      …




                                                                      15
Examples of LinkedIn APIs
HTTP POST - Create
>   Add a friend                                              /people[/id=123]
                                                                 /id
POST http://api.linkedin.com/v2/people/123/friends               /name
                                                                 /email
<friend uri=“urn:linkedin:v2:people/888”/>                       /photo
                                                                 /best-friend
201 Created                                                      /friends
                                                                   /456
Location: http://api.linkedin.com/v2/people/123/friends/888        /888
                                                                 …




                                                                                 16
Examples of LinkedIn APIs
HTTP DELETE - Remove
>   Remove a friend
DELETE http://api.linkedin.com/v2/people/123/friends/456

>   Delete a company
DELETE
  http://api.linkedin.com/v2/companies/exchange=NYSE&ticker=GM

>   Delete two companies
DELETE http://api.linkedin.com/v2/companies::(664,665)




                                                                 17
Use Standard Headers

>   Content-Type
>   Last-Modified
>   Accept
>   Vary
>   Authorization
>   Cache-Control
>   Content-MD5
>   Location
>   Warning

                       18
Incentive System

>   Multiple ways to get at the same data

>   Partner can ask for exactly what they need

>   Associate cost with resources, system of
    accounting creates incentives for partners

>   Throttling by resource rather than API



                                                 19
Real-World Example
Xobni Toolbar
>   Xobni makes ~20 million profile API calls per week
>   Default representation is ~2k on average
>   Using in-line filter brings average to ~1.5k
        25% reduction in response size
        ~11000 Mbits savings per day
             11k Mbits out of LinkedIn datacenter
             11k Mbits into Xobni datacenter
             Saves both companies money




                                                         20
Yegor Borovikov
yborovik@linkedin.com
Brandon Duncan
bduncan@linkedin.com
blog.linkedin.com


                        21

More Related Content

What's hot

Parody and pastiche - Postmodernism
Parody and pastiche - PostmodernismParody and pastiche - Postmodernism
Parody and pastiche - Postmodernism
missgillies
 
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptxNICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
MnMVlog
 

What's hot (16)

Philippine Literature during the Pre- Colonial Period
Philippine Literature during the Pre- Colonial PeriodPhilippine Literature during the Pre- Colonial Period
Philippine Literature during the Pre- Colonial Period
 
Philippine Literature during Spanish and American period (Grade 11 21st Centu...
Philippine Literature during Spanish and American period (Grade 11 21st Centu...Philippine Literature during Spanish and American period (Grade 11 21st Centu...
Philippine Literature during Spanish and American period (Grade 11 21st Centu...
 
Spanish Literature in the Philippines
Spanish Literature in the PhilippinesSpanish Literature in the Philippines
Spanish Literature in the Philippines
 
LOCAL MATERIALS USED IN CONTEMPORARY ARTS
LOCAL MATERIALS USED IN CONTEMPORARY ARTSLOCAL MATERIALS USED IN CONTEMPORARY ARTS
LOCAL MATERIALS USED IN CONTEMPORARY ARTS
 
Phonology of cebuano (vowels)
Phonology of cebuano (vowels)Phonology of cebuano (vowels)
Phonology of cebuano (vowels)
 
Phil. literature
Phil. literaturePhil. literature
Phil. literature
 
Contemporary L2.pptx
Contemporary L2.pptxContemporary L2.pptx
Contemporary L2.pptx
 
Parody and pastiche - Postmodernism
Parody and pastiche - PostmodernismParody and pastiche - Postmodernism
Parody and pastiche - Postmodernism
 
FOLK ARTS FROM VISAYAS REGION
FOLK ARTS FROM VISAYAS REGIONFOLK ARTS FROM VISAYAS REGION
FOLK ARTS FROM VISAYAS REGION
 
Writing Sample: Alumni Magazine Article
Writing Sample: Alumni Magazine ArticleWriting Sample: Alumni Magazine Article
Writing Sample: Alumni Magazine Article
 
national-artists-award.pptx
national-artists-award.pptxnational-artists-award.pptx
national-artists-award.pptx
 
JRI Orion-STEM C-21st Lit-Group 6
JRI Orion-STEM C-21st Lit-Group 6JRI Orion-STEM C-21st Lit-Group 6
JRI Orion-STEM C-21st Lit-Group 6
 
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptxNICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
NICK-JOAQUIN-GROUP-6-21ST-CENTURY.pptx
 
english 34.pptx
english 34.pptxenglish 34.pptx
english 34.pptx
 
Philippine Literature From 2000 to Present
Philippine Literature From 2000 to PresentPhilippine Literature From 2000 to Present
Philippine Literature From 2000 to Present
 
Procedures on making a Playbill English-9
Procedures on making a Playbill English-9Procedures on making a Playbill English-9
Procedures on making a Playbill English-9
 

Similar to Building Consistent RESTful APIs in a high-performance environment

Simple Web Apps With Sinatra
Simple Web Apps With SinatraSimple Web Apps With Sinatra
Simple Web Apps With Sinatra
a_l
 
Microdata semantic-extend
Microdata semantic-extendMicrodata semantic-extend
Microdata semantic-extend
Seek Tan
 
WordPress Tips and Tricks (DFW Meetup)
WordPress Tips and Tricks (DFW Meetup)WordPress Tips and Tricks (DFW Meetup)
WordPress Tips and Tricks (DFW Meetup)
Stephanie Leary
 
Building Windows 8 Apps with Windows Azure
Building Windows 8 Apps with Windows AzureBuilding Windows 8 Apps with Windows Azure
Building Windows 8 Apps with Windows Azure
Supote Phunsakul
 

Similar to Building Consistent RESTful APIs in a high-performance environment (20)

Building Viral Social Experiences
Building Viral Social ExperiencesBuilding Viral Social Experiences
Building Viral Social Experiences
 
Rest experience-report
Rest experience-reportRest experience-report
Rest experience-report
 
REST teori og praksis; REST in theory and practice
REST teori og praksis; REST in theory and practiceREST teori og praksis; REST in theory and practice
REST teori og praksis; REST in theory and practice
 
PrettyFaces URLRewrite for Servlet & JavaEE @ Devoxx 2010
PrettyFaces URLRewrite for Servlet & JavaEE @ Devoxx 2010PrettyFaces URLRewrite for Servlet & JavaEE @ Devoxx 2010
PrettyFaces URLRewrite for Servlet & JavaEE @ Devoxx 2010
 
MTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi DevicesMTC 2013 Berlin - Best Practices for Multi Devices
MTC 2013 Berlin - Best Practices for Multi Devices
 
Rest schema design
Rest schema designRest schema design
Rest schema design
 
Simple Web Apps With Sinatra
Simple Web Apps With SinatraSimple Web Apps With Sinatra
Simple Web Apps With Sinatra
 
Microdata semantic-extend
Microdata semantic-extendMicrodata semantic-extend
Microdata semantic-extend
 
Jarrar: RDFa
Jarrar: RDFaJarrar: RDFa
Jarrar: RDFa
 
Jarrar: RDFa
Jarrar: RDFaJarrar: RDFa
Jarrar: RDFa
 
Proposed schema changes - have your say
Proposed schema changes - have your sayProposed schema changes - have your say
Proposed schema changes - have your say
 
WordPress Tips and Tricks (DFW Meetup)
WordPress Tips and Tricks (DFW Meetup)WordPress Tips and Tricks (DFW Meetup)
WordPress Tips and Tricks (DFW Meetup)
 
Gem christmas calendar
Gem christmas calendarGem christmas calendar
Gem christmas calendar
 
[2019] HTTP API 설계 후회 고민
[2019] HTTP API 설계 후회 고민[2019] HTTP API 설계 후회 고민
[2019] HTTP API 설계 후회 고민
 
Onde mora a produtividade do Ruby on Rails?
Onde mora a produtividade do Ruby on Rails?Onde mora a produtividade do Ruby on Rails?
Onde mora a produtividade do Ruby on Rails?
 
Eu odeio OpenSocial
Eu odeio OpenSocialEu odeio OpenSocial
Eu odeio OpenSocial
 
Building Windows 8 Apps with Windows Azure
Building Windows 8 Apps with Windows AzureBuilding Windows 8 Apps with Windows Azure
Building Windows 8 Apps with Windows Azure
 
FamilySearch Reference Client
FamilySearch Reference ClientFamilySearch Reference Client
FamilySearch Reference Client
 
Creating HTML Pages
Creating HTML PagesCreating HTML Pages
Creating HTML Pages
 
Build Your Own World Class Directory Search From Alpha to Omega
Build Your Own World Class Directory Search From Alpha to OmegaBuild Your Own World Class Directory Search From Alpha to Omega
Build Your Own World Class Directory Search From Alpha to Omega
 

More from LinkedIn

More from LinkedIn (20)

How LinkedIn is Transforming Businesses
How LinkedIn is Transforming BusinessesHow LinkedIn is Transforming Businesses
How LinkedIn is Transforming Businesses
 
Networking on LinkedIn 101
Networking on LinkedIn 101Networking on LinkedIn 101
Networking on LinkedIn 101
 
5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائق5 تحديثات على ملفك في 5 دقائق
5 تحديثات على ملفك في 5 دقائق
 
5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 Minutes5 LinkedIn Profile Updates in 5 Minutes
5 LinkedIn Profile Updates in 5 Minutes
 
The Student's Guide to LinkedIn
The Student's Guide to LinkedInThe Student's Guide to LinkedIn
The Student's Guide to LinkedIn
 
The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017The Top Skills That Can Get You Hired in 2017
The Top Skills That Can Get You Hired in 2017
 
Accelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through InnovationAccelerating LinkedIn’s Vision Through Innovation
Accelerating LinkedIn’s Vision Through Innovation
 
How To Tell Your #workstory
How To Tell Your #workstoryHow To Tell Your #workstory
How To Tell Your #workstory
 
LinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings CallLinkedIn Q1 2016 Earnings Call
LinkedIn Q1 2016 Earnings Call
 
The 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search GuideThe 2016 LinkedIn Job Search Guide
The 2016 LinkedIn Job Search Guide
 
LinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings CallLinkedIn Q4 2015 Earnings Call
LinkedIn Q4 2015 Earnings Call
 
Banish The Buzzwords
Banish The BuzzwordsBanish The Buzzwords
Banish The Buzzwords
 
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career AdviceLinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
LinkedIn Bring In Your Parents Day 2015 - Your Parents' Best Career Advice
 
LinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings CallLinkedIn Q3 2015 Earnings Call
LinkedIn Q3 2015 Earnings Call
 
LinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: TorontoLinkedIn Economic Graph Research: Toronto
LinkedIn Economic Graph Research: Toronto
 
Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]Freelancers Are LinkedIn Power Users [Infographic]
Freelancers Are LinkedIn Power Users [Infographic]
 
Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]Top Industries for Freelancers on LinkedIn [Infographic]
Top Industries for Freelancers on LinkedIn [Infographic]
 
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
LinkedIn Quiz: Which Parent Are You When It Comes to Helping Guide Your Child...
 
LinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of DiscoveryLinkedIn Connect to Opportunity™ -- Stories of Discovery
LinkedIn Connect to Opportunity™ -- Stories of Discovery
 
LinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings CallLinkedIn Q2 2015 Earnings Call
LinkedIn Q2 2015 Earnings Call
 

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 

Building Consistent RESTful APIs in a high-performance environment

  • 1. Building Consistent RESTful APIs in a High- Performance Environment Yegor Borovikov, Software Architect Brandon Duncan, Director of Engineering LinkedIn Corporation http://blog.linkedin.com/
  • 2. Topics We’ll Cover > Examples of RESTful APIs  What’s missing?  Variety versus Uniformity > Domain Model as Foundation  Provides Uniformity  Allows Flexibility > Examples of LinkedIn APIs > Using Incentives to Scale  Some LinkedIn production APIs metrics > Q&A 2
  • 3. Examples of RESTful APIs What if you want to get a person’s profile? > Use one of these… http://social.yahooapis.com/v1/user/{guid}/profile http://api.linkedin.com/v1/people/{guid} http://www.orkut.com/social/rest/people/{guid}/@self <?xml version="1.0" encoding="UTF-8"?> <person> <id>111222</id> <first-name>Gertrude</first-name> <last-name>Stein</last-name> <headline>Author of Tender Buttons</headline> <connections total="76"> … </person> 3
  • 4. Examples of RESTful APIs What’s Missing? > Ability to get exactly what you need (variety)  If you need more, may require multiple API calls (if they exist)  If you need less, resources are wasted > Consistency of responses (uniformity)  “Same” object returned by different APIs may have different structure  Once in production, hard to get consistent later 4
  • 5. Examples of RESTful APIs Multiple Calls to Get What You Need > Want to get user’s friend’s profile? Do this…  http://social.yahooapis.com/v1/user/123/connections <connections yahoo:start="0" yahoo:count="1" yahoo:total="1"> <connection yahoo:uri="http://social.yahooapis.com/v1/user/123/connection/456? view=usercard"> <guid>456</guid> <contactId>4</contactId> </connection> </connections> 5
  • 6. Examples of RESTful APIs Multiple Calls to Get What You Need > … then make second call to get friend’s profile: http://social.yahooapis.com/v1/user/456/profile <profile yahoo:uri="http://social.yahooapis.com/v1/user/456/profile"> <guid>456</guid> <birthdate>3/3</birthdate> <created>2008-08-4T17:13:56Z</created> ... </profile>  Latent, redundant data  Optimization requires stickiness 6
  • 7. Typical Solution Variety versus Uniformity > Solution: introduce another call > Desire for variety of responses undermines uniformity of requests > Leads to RPC-like REST APIs > Many APIs + Great Documentation = Lots of Reading + Lack of Automation 7
  • 8. Domain Model as Foundation Sample Domain Model /people : Person[] // collection of Person resources /id : string // primary key /name : string /email : string // unique key /photo : url /best-friend : Person /friends : Person[] /jobs : Job[] // collection of Job resources /company : Company /title : string /start-date : date /end-date : date … /companies : Company[] /name : string /ceo : Person … 8
  • 9. Domain Model as Foundation Follow request URL to navigate through your model > To get a person’s profile: http://api.linkedin.com/v2/people/123 /people[/id=123] <person uri=“urn:linkedin:v2:people/123” key=“123”> /id <id>123</id> /name <name>Reid Hoffman</name> /email /photo <email>reid@linkedin.com</email> /best-friend <best-friend uri=“urn:linkedin:v2:people/456”/> /friends … /jobs /company </person> /title /start-date /end-date …  Conventional URL in request /companies /name  Default representation in response /ceo … 9
  • 10. Domain Model as Foundation Fine-grained Request > What if you only need certain fields (e.g., name and photo)? http://api.linkedin.com/v2/people/123:(name,photo) <person> <name>Reid Hoffman</name> /people[/id=123] <photo>http://media.linkedin.com/photos/123.jpeg</photo> /id </person> /name /email /photo /best-friend /friends /jobs /company /title /start-date /end-date … 10
  • 11. Domain Model as Foundation Fine-grained Request > To get names and photos of one’s friends and their best friends: …/v2/people/456/friends:(name,photo,best-friend: (name,photo)) /people[/id=456] /id <friends total=“66” start=“0”> /name <friend uri=“urn:linkedin:v2:people/123” key=“123”> /email /photo <name>Reid Hoffman</name> /best-friend <photo>http://media.linkedin.com/photos/123.jpeg</photo> /friends <best-friend uri=“urn:linkedin:v2:people/456” key=“456”> /123 /id <name>Brandon Duncan</name> /name <photo>http://media.linkedin.com/photos/456.jpeg</photo> /email /photo </best-friend> /best-friend </friend> /name <friend>…</friend> /photo /jobs </friends> … 11
  • 12. Domain Model as Foundation Fine-grained Request > Allows client to construct custom calls > Better than digging for the closest matching API: http://social...com/v1/user/123/profile http://social...com/v1/user/123/profile/usercard http://social...com/v1/user/123/profile/tinyusercard > Allows optimization on the backend 12
  • 13. Domain Model as Foundation Benefits > Provides a frame for both request and response semantics > Still allows for flexible syntax  Requests – path, query params, matrix params…  Responses – JSON, XML, POJOs, protobuff… > Helps to unify and automate many development tasks on both ends  Request / response creation, parsing, marshalling  Code (and documentation) generation  Discovery services 13
  • 14. Examples of LinkedIn APIs HTTP GET - Read …/people/email=brandon@gmail.com/friends?sort=name …/people/123/friends;sort=name:(name,jobs;sort=start-date) …/people:(id,name,photo)?name=page&company=google …/people::(123,456) …/people::(123,456):(name,photo) 14
  • 15. Examples of LinkedIn APIs HTTP PUT - Update > Set the user’s name: /people[/id=123] /id /name PUT http://api.linkedin.com/v2/people/123/name /email <name>Reid Hoffmann</name> /photo /best-friend … > Update the user’s profile - change name and best- friend and remove photo: PUT http://api.linkedin.com/v2/people/123 <person> /people[/id=123] <name>Reid Hoffman</name> /id /name <best-friend uri=“urn:linkedin:v2:people/999”/> /email <photo xsi:nil=“true”/> /photo </person> /best-friend … 15
  • 16. Examples of LinkedIn APIs HTTP POST - Create > Add a friend /people[/id=123] /id POST http://api.linkedin.com/v2/people/123/friends /name /email <friend uri=“urn:linkedin:v2:people/888”/> /photo /best-friend 201 Created /friends /456 Location: http://api.linkedin.com/v2/people/123/friends/888 /888 … 16
  • 17. Examples of LinkedIn APIs HTTP DELETE - Remove > Remove a friend DELETE http://api.linkedin.com/v2/people/123/friends/456 > Delete a company DELETE http://api.linkedin.com/v2/companies/exchange=NYSE&ticker=GM > Delete two companies DELETE http://api.linkedin.com/v2/companies::(664,665) 17
  • 18. Use Standard Headers > Content-Type > Last-Modified > Accept > Vary > Authorization > Cache-Control > Content-MD5 > Location > Warning 18
  • 19. Incentive System > Multiple ways to get at the same data > Partner can ask for exactly what they need > Associate cost with resources, system of accounting creates incentives for partners > Throttling by resource rather than API 19
  • 20. Real-World Example Xobni Toolbar > Xobni makes ~20 million profile API calls per week > Default representation is ~2k on average > Using in-line filter brings average to ~1.5k  25% reduction in response size  ~11000 Mbits savings per day  11k Mbits out of LinkedIn datacenter  11k Mbits into Xobni datacenter  Saves both companies money 20