REST APIs form the backbone of modern interconnected systems by providing a language-agnostic communication interface. REST API specifications should clearly describe all response types, but automatically generating specifications is difficult with existing tools.
We present RestPi, a type inference engine capable of automatically generating REST API specifications. The novel contribution of RestPi is our use of path-sensitive type inference, which encodes symbolic path-constraints directly into a type system. This allows RestPi to enumerate all response types by considering each distinct execution path through an endpoint implementation. We implement path-sensitive type inference for Ruby, a popular language used for REST API servers. We evaluate RestPi by using it to infer types for 128 endpoints across 5 open-source REST API implementations without utilizing existing specifications or test suites. We find RestPi performs type inference efficiently and produces types that are more precise and complete than those obtained via an HTTP proxy. Our results suggest that path-sensitivity is a key technique to enumerate distinct response types for REST endpoints.