Java Reference
In-Depth Information
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
/chat
HTTP
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. Addi-
tionally, a
next Link
header is sent back with the HTTP response:
HTTP
HTTP
/
1.1 200
OOK
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 dis-
playing the chat message, the client will do a new GET request to the server using the URL
contained within the
next Link
header: