[go: up one dir, main page]
More Web Proxy on the site http://driver.im/ skip to main content
10.1145/2567948.2579220acmotherconferencesArticle/Chapter ViewAbstractPublication PagesthewebconfConference Proceedingsconference-collections
research-article

Pragmatic hypermedia: creating a generic, self-inflating API client for production use

Published: 07 April 2014 Publication History

Abstract

Hypermedia API design is a method of creating APIs using hyperlinks to represent and publish an API's functionality. Hypermedia-based APIs bring theoretical advantages over many other designs, including the possibility of self-updating, generic API client software. Such hypermedia API clients only lately have come to exist, and the existing hypermedia client space did not compare favorably to custom API client libraries, requiring somewhat tedious manual access to HTTP resources. Nonetheless, the limitations in creating a compelling hypermedia client were few.
This paper describes the design and implementation of HyperResource, a fully generic, production-ready Ruby client library for hypermedia APIs. The project leverages the inherent practicality of hypermedia design, demonstrates its immediate usefulness in creating self-generating API clients, enumerates several abstractions and strategies that help in creating hypermedia APIs and clients, and promotes hypermedia API design as the easiest option available to an API programmer.

References

[1]
Activerecord, https://github.com/rails/activerecord
[2]
Activeresource, https://github.com/rails/activeresource
[3]
Amazon appstream rest api documentation, http://docs.aws.amazon.com/appstream/latest/developerguide/rest-api.html
[4]
Direct proxies, http://wiki.ecmascript.org/doku.php?id=harmony:direct_proxies
[5]
Faraday http library, https://github.com/lostisland/faraday
[6]
Github v3 api documentation, http://developer.github.com/v3/
[7]
Hyperagent, http://weluse.github.io/hyperagent/
[8]
Hyperclient, https://github.com/codegram/hyperclient
[9]
jquery.param() documentation, http://api.jquery.com/jquery.param/
[10]
Json for linking data, http://json-ld.org
[11]
Localytics api version 1 documentation, https://api.localytics.com/docs
[12]
Mapmyfitness api documentation, https://developer.mapmyapi.com/docs
[13]
Memcache: a distributed memory object caching system, http://memcached.org
[14]
Siren4j, https://code.google.com/p/siren4j/
[15]
Web services description language (wsdl) 1.1, http://www.w3.org/TR/wsdl
[16]
Amundsen, M.: Collection+json hypermedia type, http://amundsen.com/media-types/collection/
[17]
Fielding, R.: Architectural Styles and the Design of Network-based Software Architectures. Ph.D. thesis, University of California, Irvine, Irvine, CA (2000)
[18]
Franks, J., Hallam-Baker, P., Hostetler, J., Lawrence, S., Leach, P., Luotonen, A., Stewart, L.: Http authentication: Basic and digest access authentication. RFC 2617 (Mar 2012), http://www.ietf.org/rfc/rfc2617.txt
[19]
Gamache, P.: Hyperresource: A self-inflating ruby client for hypermedia apis, https://github.com/gamache/hyperresource
[20]
Gamache, P.: Ruby method cache -- a benchmark, http://petegamache.com/ruby-method-cache-a-benchmark/
[21]
Gregorio, J., Fielding, R., Hadley, M., Nottingham, M., Orchard, D.: Uri template. RFC 6570 (Proposed Standard) (Mar 2012), http://www.ietf.org/rfc/rfc6570.txt
[22]
Kelly, M.: Hypertext application language, http://stateless.co/hal_specification.html
[23]
McCoy, S., Myers, R.: Understanding ruby's method cache (Oct 2013), http://wickedgoodruby.com/2013/speakers/mccoy_myers
[24]
Somerville, C.: Things that clear ruby's method cache, https://charlie.bz/blog/things-that-clear-rubys-method-cache
[25]
Swiber, K.: Siren: Structured interface for representing entities, https://github.com/kevinswiber/siren
[26]
Waldo, J., Wyant, G., Wollrath, A., Kendall, S.: A note on distributed computing (1994), http://dl.acm.org/citation.cfm?id=974938

Cited By

View all
  • (2018)Hypermedia Driven Application Programming Interface for Learning Object ManagementProcedia Computer Science10.1016/j.procs.2018.08.157135(120-127)Online publication date: 2018

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image ACM Other conferences
WWW '14 Companion: Proceedings of the 23rd International Conference on World Wide Web
April 2014
1396 pages
ISBN:9781450327459
DOI:10.1145/2567948
Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for components of this work owned by others than ACM must be honored. Abstracting with credit is permitted. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. Request permissions from [email protected]

Sponsors

  • IW3C2: International World Wide Web Conference Committee

In-Cooperation

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 07 April 2014

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. generic API client
  2. hypermedia API
  3. service-oriented architecture

Qualifiers

  • Research-article

Conference

WWW '14
Sponsor:
  • IW3C2

Acceptance Rates

Overall Acceptance Rate 1,899 of 8,196 submissions, 23%

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)3
  • Downloads (Last 6 weeks)1
Reflects downloads up to 13 Dec 2024

Other Metrics

Citations

Cited By

View all
  • (2018)Hypermedia Driven Application Programming Interface for Learning Object ManagementProcedia Computer Science10.1016/j.procs.2018.08.157135(120-127)Online publication date: 2018

View Options

Login options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media