Chapter 27. Examples for Chapter 13
In Chapter 13, you learned how clients can invoke HTTP requests in the background. You also learned how the server side can detach response processing from the original calling thread with an AsyncResponse. In this chapter, we’ll use both of these features to implement a customer chat service.
Example ex13_1: Chat REST Interface
Before we dive into code, let me explain the REST interface for our chat service. The service will share a URL to both send and receive chat messages. The service will work much like Twitter in that if one user posts a chat, anybody listening for chats will see it. Posting a chat is a simple HTTP POST request. Here’s an example request:
POST/chatHTTP/1.1Host:localhost:8080Content-Type:text/plainHello everybody
As you can see, all the user has to do is post a simple text message to the /chat URL and messages will be sent to all listeners.
To receive chat messages, clients will make a blocking GET request to the chat server:
GET/chatHTTP/1.1Host:localhost:8080
When a chat becomes available, this GET request returns with the next chat message. Additionally, a next Link header is sent back with the HTTP response:
HTTP/1.1200OKContent-Type:text/plainLink:</chat?current=1>; rel=nextHello everybody
We do not want the chat client to lose any messages while it is processing a response. The next link is a placeholder into the list of messages that are posted to the server. After displaying the chat message, the client will ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access