{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,6,3]],"date-time":"2026-06-03T05:59:14Z","timestamp":1780466354414,"version":"3.54.1"},"reference-count":42,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2025,10,9]]},"abstract":"<jats:p>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.<\/jats:p>\n          <jats:p>We present REST\ud835\udf0b, a type inference engine capable of automatically generating REST API specifications. The novel contribution of REST\ud835\udf0b is our use of path-sensitive type inference, which encodes symbolic path-constraints directly into a type system. This allows REST\ud835\udf0b 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 REST\ud835\udf0b by using it to infer types for 132 endpoints across 5 open-source REST API implementations without utilizing existing specifications or test suites. We find REST\ud835\udf0b 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.<\/jats:p>","DOI":"10.1145\/3763055","type":"journal-article","created":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T08:49:50Z","timestamp":1759999790000},"page":"144-165","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":1,"title":["RestPi: Path-Sensitive Type Inference for REST APIs"],"prefix":"10.1145","volume":"9","author":[{"ORCID":"https:\/\/orcid.org\/0000-0001-5269-7063","authenticated-orcid":false,"given":"Mark W.","family":"Aldrich","sequence":"first","affiliation":[{"name":"Tufts University, Medford, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0009-0005-2533-7499","authenticated-orcid":false,"given":"Kyla H.","family":"Levin","sequence":"additional","affiliation":[{"name":"University of Massachusetts at Amherst, Amherst, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-9369-4069","authenticated-orcid":false,"given":"Michael","family":"Coblenz","sequence":"additional","affiliation":[{"name":"University of California at San Diego, La Jolla, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-8043-1166","authenticated-orcid":false,"given":"Jeffrey S.","family":"Foster","sequence":"additional","affiliation":[{"name":"Tufts University, Medford, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2025,10,9]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"2025. Generate OpenAPI schema from RSpec request specs. https:\/\/github.com\/exoego\/rspec-openapi"},{"key":"e_1_2_1_2_1","unstructured":"2025. HAR to OpenAPI spec generator. https:\/\/github.com\/jonluca\/har-to-openapi"},{"key":"e_1_2_1_3_1","doi-asserted-by":"publisher","unstructured":"Mark W Aldrich Kyla H Levin Michael Coblenz and Jeffrey S Foster. 2025. Replication Package for : Path Sensitive Type Inference for REST APIs. https:\/\/doi.org\/10.5281\/zenodo.16916395 10.5281\/zenodo.16916395","DOI":"10.5281\/zenodo.16916395"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2022.3150618"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICST.2018.00046"},{"key":"e_1_2_1_6_1","unstructured":"Luke Autry. 2024. Build OpenAPI-compliant REST APIs using TypeScript and Node. https:\/\/github.com\/lukeautry\/tsoa"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/390016.808445"},{"key":"e_1_2_1_8_1","volume-title":"Journey: An online questionnaire application.  https:\/\/github.com\/nbudin\/journey\/","author":"Budin Nat","year":"2024","unstructured":"Nat Budin. 2024. Journey: An online questionnaire application. https:\/\/github.com\/nbudin\/journey\/"},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-319-69035-3_32"},{"key":"e_1_2_1_10_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2022.102781"},{"key":"e_1_2_1_11_1","unstructured":"OpenFarm CC. 2024. A free and open database for farming and gardening knowledge. https:\/\/github.com\/openfarmcc\/OpenFarm"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.1109\/VL-HCC57772.2023.00025"},{"key":"e_1_2_1_13_1","unstructured":"Code.org. 2024. The code powering. code.org"},{"key":"e_1_2_1_14_1","unstructured":"Ruby Swagger Community. 2024. Seamlessly adds a Swagger to Rails-based API\u2019s. https:\/\/github.com\/rswag\/rswag"},{"key":"e_1_2_1_15_1","volume-title":"A new type assignment for \u03bb -terms. Archiv f\u00fcr mathematische Logik und Grundlagenforschung, 19","author":"Coppo Mario","year":"1978","unstructured":"Mario Coppo and Mariangiola Dezani-Ciancaglini. 1978. A new type assignment for \u03bb -terms. Archiv f\u00fcr mathematische Logik und Grundlagenforschung, 19 (1978), 139\u2013156."},{"key":"e_1_2_1_16_1","doi-asserted-by":"publisher","DOI":"10.1145\/234528.234740"},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/512529.512538"},{"key":"e_1_2_1_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/1375581.1375615"},{"key":"e_1_2_1_19_1","volume-title":"Architectural styles and the design of network-based software architectures","author":"Fielding Roy Thomas","unstructured":"Roy Thomas Fielding. 2000. Architectural styles and the design of network-based software architectures. University of California, Irvine."},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.2012.14"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/3519939.3523450"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/3510454.3528637"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3597503.3639137"},{"key":"e_1_2_1_24_1","volume-title":"Discourse: A platform for community discussion.  https:\/\/github.com\/discourse\/discourse","author":"Civilized Discourse Construction Kit Inc.","year":"2024","unstructured":"Civilized Discourse Construction Kit Inc. 2024. Discourse: A platform for community discussion. https:\/\/github.com\/discourse\/discourse"},{"key":"e_1_2_1_25_1","unstructured":"SmartBear Software Inc. 2024. Swagger. https:\/\/swagger.io"},{"key":"e_1_2_1_26_1","unstructured":"OpenAPI Initiative. 2024. OpenAPI Specification v3.1.0. https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/main\/versions\/3.1.0.md"},{"key":"e_1_2_1_27_1","volume-title":"The open LMS by Instructure","author":"Inc. Instructure. 2024.","unstructured":"Inc. Instructure. 2024. The open LMS by Instructure, Inc.. https:\/\/github.com\/instructure\/canvas-lms"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/3314221.3314630"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/3426422.3426985"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/2980983.2908091"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/3533767.3534401"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/390016.808444"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/360248.360252"},{"key":"e_1_2_1_34_1","volume-title":"Paphos","author":"Ly Papa Alioune","year":"2012","unstructured":"Papa Alioune Ly, Carlos Pedrinaci, and John Domingue. 2012. Automated information extraction from web APIs documentation. In Web Information Systems Engineering-WISE 2012: 13th International Conference, Paphos, Cyprus, November 28-30, 2012. Proceedings 13. 497\u2013511."},{"key":"e_1_2_1_35_1","unstructured":"Kamil Mysliwiec. 2024. OpenAPI (Swagger) module for Nest framework (node.js). https:\/\/github.com\/nestjs\/swagger"},{"key":"e_1_2_1_36_1","unstructured":"Badr Nasslahsen. 2024. Library for OpenAPI 3 with spring-boot. https:\/\/github.com\/springdoc\/springdoc-openapi"},{"key":"e_1_2_1_37_1","unstructured":"Sebasti\u00e1n Ram\u00edrez. 2024. FastAPI: a modern fast (high-performance) web framework for building APIs with Python based on standard Python type hints. https:\/\/github.com\/fastapi\/fastapi"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/2786805.2786830"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICSE-SEIP.2017.11"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1109\/ASE.2015.52"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/1328897.1328486"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1109\/ICST46399.2020.00024"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3763055","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,10,9]],"date-time":"2025-10-09T17:40:32Z","timestamp":1760031632000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3763055"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2025,10,9]]},"references-count":42,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2025,10,9]]}},"alternative-id":["10.1145\/3763055"],"URL":"https:\/\/doi.org\/10.1145\/3763055","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2025,10,9]]},"assertion":[{"value":"2024-10-16","order":0,"name":"received","label":"Received","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-08-12","order":2,"name":"accepted","label":"Accepted","group":{"name":"publication_history","label":"Publication History"}},{"value":"2025-10-09","order":3,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}