HTTP Examples
Hello World
An obligatory "Hello World" example for HTTP.
Asynchronous + Aggregated
This example demonstrates asynchronous request processing where the payload body is aggregated into a single object instead of a stream.
-
HelloWorldServer - a server that demonstrates the asynchronous API and responds with a simple
Hello World!
response body as atext/plain
. -
HelloWorldClient - a client that sends a
GET
request to the server and receives the response as a single content. -
HelloWorldUrlClient - a client that sends a
GET
request to the specified URL in absolute-form and receives the response as a single content.
Asynchronous + Streaming
This example demonstrates asynchronous request processing where the payload body is a stream.
-
HelloWorldStreamingServer - a server that responds with a stream of
text/plain
payload body for every request. -
HelloWorldStreamingClient - a client that sends a
GET
request to the server and receives the response payload body as a stream of buffers. -
HelloWorldStreamingUrlClient - a client that sends a
GET
request to the specified URL in absolute-form and receives the response payload body as a stream of buffers.
Blocking + Aggregated
This example demonstrates blocking request processing where the payload body is aggregated into a single object. The APIs will block if content is requested but there is no content available.
-
BlockingHelloWorldServer - a server that demonstrates the blocking API and responds with a simple
Hello World!
response body as atext/plain
. -
BlockingHelloWorldClient - a client that sends a
GET
request to the server and receives the response payload body as one aggregated object. -
BlockingHelloWorldUrlClient - a client that sends a
GET
request to the specified URL in absolute-form and receives the response payload body as one aggregated object.
Blocking + Streaming
This example demonstrates blocking request processing where the payload body is a blocking iterable stream.
-
BlockingHelloWorldStreamingServer - a server that responds with an iterable stream of
text/plain
payload body for every request. -
BlockingHelloWorldStreamingClient - a client that sends a
GET
request to the server and receives the response payload body as a blocking iterable stream of buffers. -
BlockingHelloWorldStreamingUrlClient - a client that sends a
GET
request to the specified URL in absolute-form and receives the response payload body as a blocking iterable stream of buffers.
Serialization
A similar to "Hello World" examples, which demonstrate asynchronous-aggregated, asynchronous-streaming, blocking-aggregated, and blocking-streaming client and server with JSON serialization of simple pojo classes.
Client sends a POST
request with a JSON payload PojoRequest and expects a response
with Content-Type: application/json
and MyPojo as a payload.
JAX-RS
ServiceTalk provides a JAX-RS implementation that can plugin to ServiceTalk APIs. This example demonstrates how to use these APIs, and how different API variations (e.g. asynchronous/blocking and aggregated/streaming) are exposed.
Hello world
A simple "Hello World" example built using JAX-RS.
-
HelloWorldJaxRsServer - a JAX-RS based hello world server that demonstrates how to write blocking as well as asynchronous resource methods.
-
HelloWorldJaxRsResource - a JAX-RS resource having different methods for blocking and asynchronous interactions.
This example does not have a client yet but one can use curl to send requests like:
curl http://localhost:8080/greetings/hello
More examples of how to use the resource can be found in the HelloWorldJaxRsResource javadocs.
MetaData
This example demonstrates some of the basic functionality of the HttpMetaData classes:
-
Setting and getting response status.
-
Setting and getting query parameters.
-
Setting, checking, and getting headers.
-
Printing headers without redaction/filtering.
Using the following classes:
-
MetaDataDemoServer - A server that provides greetings in various languages.
-
MetaDataDemoClient - A client that requests greetings in various languages.
This example uses the blocking + aggregated API, as the metadata API is the same across all the HTTP APIs. |
HTTP/2
These examples demonstrate how users can configure HTTP/2 transport in ServiceTalk.
HTTP/2 with Prior-Knowledge
This example demonstrates how to configure using HTTP/2 transport with Prior-Knowledge for HTTP clients and servers:
-
Http2PriorKnowledgeServer - A server that uses HTTP/2 with Prior Knowledge.
-
Http2PriorKnowledgeClient - A client that uses HTTP/2 with Prior Knowledge.
HTTP/2 via ALPN for secure connections
For secure TLS connections ALPN extension could be used to negotiate the communication protocol:
-
HttpServerWithAlpn - A server that negotiates HTTP/2 or HTTP/1.1 using ALPN extension for TLS connections.
-
HttpClientWithAlpn - A client that negotiates HTTP/2 or HTTP/1.1 using ALPN extension for TLS connections.
If HTTP/1.x protocol is configured ServiceTalk always fallbacks to it if the peer does not support ALPN extension.
Your runtime must support ALPN extension for TLS. The recommended way is to use OpenSSL provider and add netty-tcnative artifact to the classpath. If OpenSSL is not available, make sure your JVM version supports ALPN or use another provider that supports it. |
These examples use the blocking + aggregated API for demonstration purposes, as the builder API is the same across all the HTTP APIs. |
Service Composition
An advanced example which demonstrates a composition of various ServiceTalks services in one application. For more information see Service Composition.