Today, my task was to write a REST API in Pharo using the Teapot framework. Teapot is a packaged designed to make making REST APIs with Pharo A LOT easier than writing a REST API from scratch in Zinc. For example, to output Hello World when a user navigates to /hello, this is all the code that is needed:
Teapot on
GET: '/welcome' -> 'Hello World!';
start.
I wrote a package named UserAPI on SmallTalkHub that relies on the ContactManager package here to retrieve a list of users and display it as JSON in the browser after a user navigates to /users. I took some inspiration from this blog. To set it up, load the packages into your Pharo image. After that, run this command in Playground to start up the app:
teapot := Teapot configure: {
#defaultOutput -> #json.
#port -> 8080.
#debugMode -> true
}.
teapotInstance := TeapotRequestHandler new.
teapotInstance runApp: teapot.
For production, you can set the debugMode to false. To stop the server, stop all instances of Teapot:
Teapot stopAll.
That’s it! In my very simple app, I really only have two methods: #handleGetRequest: and #runApp:. The runApp method starts Teapot and defines the path Teapot should “activate” in its API. The handleGetRequest method handles the request when the /users page is hit. It calls the Contact class which returns an ordered collection. The app uses NeoJSON to parse the ordered collection to JSON suitable for a RESTful API.
24 Jan 2016 #smalltalk #pharo #teapot #squeak #rest #api #zinc