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 /chat HTTP/1.1
Host: localhost:8080
Content-Type: text/plain

Hello 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 /chat HTTP/1.1
Host: 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.1 200 OK
Content-Type: text/plain
Link: </chat?current=1>; rel=next

Hello 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 ...

Get RESTful Java with JAX-RS 2.0, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.