Sierra APIs Rebecca Jones, VP of Software Engineering, III Brad Jung, VP of Product Management, III
Why APIs?
What Have We Been Hearing And Seeing? Image Source: Nielson.com
What Do We Hope They Will Do For You? Extend core ILS / LSP to better serve patrons New uses Solve old problems Attract new users Enable you to engage developers Allow you to rapidly prototype
Development Model Library Idea Initial Prototype App for Library Use Share with Community Expand App Use Mainstream Feature / App
Usage Details Best News: Basic API usage included with your application purchase / subscription S, M, L Usage Commercial Use TBD
What We Want To Provide Well Defined APIs Tiered Use Support Developer Community
Sierra REST API Strategy API Objectives Research Authentication Syntax
Sierra REST API Objectives Maximize developer productivity and success “Industry standard” Consistent, easy to use syntax Extensible Discoverable Manage sophisticated data Small footprint/low server impact
Research Google APIs Google Drive Google Picasa YouTube API Craft Google Group Apigee videos and presentations Lots of other resources
Authentication Consumer IDs For developers Library manages who has access Grant types OAuth Password Sierra user types Staff (with associated permissions) Patron (permissions only to the patron's info)
Record Profiles Maps your specific record data to your app Field selection "title" instead of t245 subfield a and b "publisher" instead of p260 subfield a Named set of fields returned for a record. For example, bib info: “title” “author” “publisher”
Partial Response Allows you to bring back only the data you need For the display you only want Bib Info title author publisher holds, for each hold date placed patron name pickup location NOT additional data fields, items, etc
Example Request GET /v2/bibs/b ?fields=bibinfo,holds
Example Response { "key": “b ”, “bibinfo": {”title" : [{"value": ” The Big Short: Inside the Doomsday Machine"}], ”author” : [{"value": ” Michael Lewis"}], ”publisher” : [{"value": ” W.W. Norton & Company; 1st Edition (March 15, 2010)"}]}, "holds": { "links": { "self": { "href": ” }}, "array": [ { "key": "hold-36”, "links": { "self": { "href": ” }}, “attributes": { ”pickupAtName": ”Main Library”, ”datePlaced": ” T10:15:56-08:00”} “patron": { "info": [ ”fullName": [{"value": ” Michael Pollan"}]} }, { "key": "hold-247", "links": { "self": { "href": ” }}, “attributes": { ”pickupAtName": ” Bookmobile”, ”datePlaced”: ” T10:56:22-08:00”} “patron": { ”info": [ ”fullName": [{"value": ” Michael Chabon”}}] }
Partial Update PUT /v2/holds/hold-36 Update just pickup location code {“attributes": { "pickupLocationCode": ”main”}} Update “not wanted after” date {“attributes”: { ”notWantedAfterDate”: ” T10:15:56-08:00”}} Or both {“attributes”:{ "pickupLocationCode”: ”main”, “notWantedAfterDate”: ” T10:15:56-08:00”}}
Other Standard Elements Query Parameters ?query=“the big short” Pagination Ability to ask for a reasonable chunk ?Offset = 0 ?Limit = 25 (25 at a time) Links (URIs) for navigation self next previous Response Codes Success Not authenticated Not authorized
Consumer Types Java JavaScript PHP Ruby iOS Flash Perl etc
Hot Authors at The Public Library of Cincinnati and Hamilton County
Developer Community API Definitions Discussions Code Samples Code Sharing “Sandbox” SQL as well
Roadmap Winter 2013 Discovery – Read Only Holds Early 2014 Key Circulation Functions Developer Community Summer 2014 Key Tech Services Connections
Next steps Cincinnati - we are generalizing the API Looking for other early adopters “We’re listening”
Thank You!