  With the rise of software-as-a-service and microservice architectures,
RESTful APIs are now ubiquitous in mobile and web applications. A service can
have tens or hundreds of API methods, making it a challenge for programmers to
find the right combination of methods to solve their task.
  We present APIphany, a component-based synthesizer for programs that compose
calls to RESTful APIs. The main innovation behind APIphany is the use of
precise semantic types, both to specify user intent and to direct the search.
APIphany contributes three novel mechanisms to overcome challenges in adapting
component-based synthesis to the REST domain: (1) a type inference algorithm
for augmenting REST specifications with semantic types; (2) an efficient
synthesis technique for "wrangling" semi-structured data, which is commonly
required in working with RESTful APIs; and (3) a new form of simulated
execution to avoid executing APIs calls during synthesis. We evaluate APIphany
on three real-world APIs and 32 tasks extracted from GitHub repositories and
StackOverflow. In our experiments, APIphany found correct solutions to 29
tasks, with 23 of them reported among top ten synthesis results.
