Welcome!

Java IoT Authors: Yeshim Deniz, Liz McMillan, Zakia Bouachraoui, Pat Romanski, Elizabeth White

Related Topics: IBM Cloud, Java IoT, Apache

IBM Cloud: Article

A Framework for REST in Java

The Apache Wink Project

Not long ago I worked on a team charged with building up a Java-based REST infrastructure. Our goals were to first support what was then an emerging specification for Java-based RESTful services called JAX-RS. Beyond that, we had thoughts of building an entire framework, both server and client, around RESTful services written in Java. Some of the people I worked with on that team are now part of the team that is responsible for an open source implementation called Apache Wink which embodies some of our early ideas and much more.

Developers have been implementing RESTful services in Java for a long, long time, so what's the deal with JAX-RS and an entire framework? Well, the way developers have been implementing REST services typically involves writing their own custom servlet. Within the servlet they write custom code to route incoming requests to the proper back-end resources. This can be extremely simple, but it can also become quite involved depending on the number of resources, the degree to which they are nested, depend on content negotiation capabilities, and more. Why not turn a lot of this over to a container capable of providing such function?

A JAX-RS aware container can provide a lot of the function that developers previously had to code in their servlets. In such a container users can package and deploy a Java bean with annotations that declare a resource and describe that resource to the container. For example, consider the following bean that represents book orders:

package jaxrs.example
@Path("/bookorders")
public class BookOrders {
     @GET
@Path("/{orderId}")
@Produces("application/json")
public BookOrder getBookOrder(
@PathParam("orderId") String orderId) {
....
}

@POST
@Accepts("application/json")
public void createBookOrder
(BookOrder newOrder) {
....
}

This is a very simple example, but in just this little bit of code with annotations, quite a bit of logic that would have gone in a servlet is replaced. The annotations in this example encapsulate both request routing and content negotiation. For instance, an incoming HTTP GET request with a path like "/bookorders/{orderId}" would automatically be routed to the BookOrder's getBookOrder method provided the HTTP Accept header in the request was congruent with the "application/json" content type. Likewise, an incoming HTTP POST request with a path of "/bookorders" would be routed to the BookOrder's createBookOrder method providing the Content-Type of the incoming request was "application/json". As you can see, both request routing and content negotiation capabilities are provided by annotation metadata.

Use cases with JAX-RS can be much more complex. Users can develop deeply nested resource URI trees, plug into the data handling framework for both requests and responses, and much more. Many of the things that users require to provide Java-based RESTful services are either provided by JAX-RS or can be supplied by the user via standards-based extension mechanisms.

However, and perhaps you picked up on this above, the JAX-RS specification only provides standards for the server-side programming model. A standard client-side programming model API for Java-based RESTful services is not in the scope of this specification (or any other one that I'm aware of at this time, but please drop me a line if you know of one). The Apache Wink project (and many other Java-based RESTful services offerings to be fair) realizes that such an API and framework provides quite a bit of convenience to developers. Instead of the developer implementing such a framework on their own, or worse yet, having to deal with low-level client-side HTTP APIs (i.e. Jakarta Commons Http Client), they can simply utilize a higher level API to communicate with resources they declared on the server using JAX-RS. For example, using the Apache Wink project, our client to the BookOrders resource may look like the following:

RestClient client = new RestClient();

Resource resource = client.resource
(
"http://jaxrs.example.com/bookorders/1");

BookOrder bookOrder = resource.accept
("application/json").get(BookOrder.class);

It certainly seems like the movement toward RESTful services is a growing trend. Many cloud service providers, Amazon most notably, offer REST interfaces to the functions and capabilities they deliver. In addition, many vendors now deliver products with REST interfaces to accompany the more traditional GUI and CLI interfaces. As the use of REST continues to grow, it seems inevitable that the use of Java with such services, on both the client and server, will grow as well. If you have any interest in this area, I'd encourage you to take a look at the different Java offerings available for building RESTful services and clients. With admitted bias I would suggest starting with the Apache Wink project. Download the code, try out the samples, and get involved in the open community.

More Stories By Dustin Amrhein

Dustin Amrhein joined IBM as a member of the development team for WebSphere Application Server. While in that position, he worked on the development of Web services infrastructure and Web services programming models. In his current role, Dustin is a technical specialist for cloud, mobile, and data grid technology in IBM's WebSphere portfolio. He blogs at http://dustinamrhein.ulitzer.com. You can follow him on Twitter at http://twitter.com/damrhein.

IoT & Smart Cities Stories
Andrew Keys is Co-Founder of ConsenSys Enterprise. He comes to ConsenSys Enterprise with capital markets, technology and entrepreneurial experience. Previously, he worked for UBS investment bank in equities analysis. Later, he was responsible for the creation and distribution of life settlement products to hedge funds and investment banks. After, he co-founded a revenue cycle management company where he learned about Bitcoin and eventually Ethereal. Andrew's role at ConsenSys Enterprise is a mul...
CloudEXPO New York 2018, colocated with DXWorldEXPO New York 2018 will be held November 11-13, 2018, in New York City and will bring together Cloud Computing, FinTech and Blockchain, Digital Transformation, Big Data, Internet of Things, DevOps, AI, Machine Learning and WebRTC to one location.
DXWorldEXPO | CloudEXPO are the world's most influential, independent events where Cloud Computing was coined and where technology buyers and vendors meet to experience and discuss the big picture of Digital Transformation and all of the strategies, tactics, and tools they need to realize their goals. Sponsors of DXWorldEXPO | CloudEXPO benefit from unmatched branding, profile building and lead generation opportunities.
Disruption, Innovation, Artificial Intelligence and Machine Learning, Leadership and Management hear these words all day every day... lofty goals but how do we make it real? Add to that, that simply put, people don't like change. But what if we could implement and utilize these enterprise tools in a fast and "Non-Disruptive" way, enabling us to glean insights about our business, identify and reduce exposure, risk and liability, and secure business continuity?
The deluge of IoT sensor data collected from connected devices and the powerful AI required to make that data actionable are giving rise to a hybrid ecosystem in which cloud, on-prem and edge processes become interweaved. Attendees will learn how emerging composable infrastructure solutions deliver the adaptive architecture needed to manage this new data reality. Machine learning algorithms can better anticipate data storms and automate resources to support surges, including fully scalable GPU-c...
DXWorldEXPO LLC announced today that Telecom Reseller has been named "Media Sponsor" of CloudEXPO | DXWorldEXPO 2018 New York, which will take place on November 11-13, 2018 in New York City, NY. Telecom Reseller reports on Unified Communications, UCaaS, BPaaS for enterprise and SMBs. They report extensively on both customer premises based solutions such as IP-PBX as well as cloud based and hosted platforms.
Digital Transformation: Preparing Cloud & IoT Security for the Age of Artificial Intelligence. As automation and artificial intelligence (AI) power solution development and delivery, many businesses need to build backend cloud capabilities. Well-poised organizations, marketing smart devices with AI and BlockChain capabilities prepare to refine compliance and regulatory capabilities in 2018. Volumes of health, financial, technical and privacy data, along with tightening compliance requirements by...
@DevOpsSummit at Cloud Expo, taking place November 12-13 in New York City, NY, is co-located with 22nd international CloudEXPO | first international DXWorldEXPO and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time t...
DXWorldEXPO LLC announced today that "IoT Now" was named media sponsor of CloudEXPO | DXWorldEXPO 2018 New York, which will take place on November 11-13, 2018 in New York City, NY. IoT Now explores the evolving opportunities and challenges facing CSPs, and it passes on some lessons learned from those who have taken the first steps in next-gen IoT services.
SYS-CON Events announced today that Silicon India has been named “Media Sponsor” of SYS-CON's 21st International Cloud Expo, which will take place on Oct 31 – Nov 2, 2017, at the Santa Clara Convention Center in Santa Clara, CA. Published in Silicon Valley, Silicon India magazine is the premiere platform for CIOs to discuss their innovative enterprise solutions and allows IT vendors to learn about new solutions that can help grow their business.