Welcome!

Java IoT Authors: Yeshim Deniz, Pat Romanski, Liz McMillan, Zakia Bouachraoui, 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
Early Bird Registration Discount Expires on August 31, 2018 Conference Registration Link ▸ HERE. Pick from all 200 sessions in all 10 tracks, plus 22 Keynotes & General Sessions! Lunch is served two days. EXPIRES AUGUST 31, 2018. Ticket prices: ($1,295-Aug 31) ($1,495-Oct 31) ($1,995-Nov 12) ($2,500-Walk-in)
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...
Nicolas Fierro is CEO of MIMIR Blockchain Solutions. He is a programmer, technologist, and operations dev who has worked with Ethereum and blockchain since 2014. His knowledge in blockchain dates to when he performed dev ops services to the Ethereum Foundation as one the privileged few developers to work with the original core team in Switzerland.
René Bostic is the Technical VP of the IBM Cloud Unit in North America. Enjoying her career with IBM during the modern millennial technological era, she is an expert in cloud computing, DevOps and emerging cloud technologies such as Blockchain. Her strengths and core competencies include a proven record of accomplishments in consensus building at all levels to assess, plan, and implement enterprise and cloud computing solutions. René is a member of the Society of Women Engineers (SWE) and a m...
Digital Transformation and Disruption, Amazon Style - What You Can Learn. Chris Kocher is a co-founder of Grey Heron, a management and strategic marketing consulting firm. He has 25+ years in both strategic and hands-on operating experience helping executives and investors build revenues and shareholder value. He has consulted with over 130 companies on innovating with new business models, product strategies and monetization. Chris has held management positions at HP and Symantec in addition to ...
The challenges of aggregating data from consumer-oriented devices, such as wearable technologies and smart thermostats, are fairly well-understood. However, there are a new set of challenges for IoT devices that generate megabytes or gigabytes of data per second. Certainly, the infrastructure will have to change, as those volumes of data will likely overwhelm the available bandwidth for aggregating the data into a central repository. Ochandarena discusses a whole new way to think about your next...
CloudEXPO | DevOpsSUMMIT | DXWorldEXPO 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.
Dynatrace is an application performance management software company with products for the information technology departments and digital business owners of medium and large businesses. Building the Future of Monitoring with Artificial Intelligence. Today we can collect lots and lots of performance data. We build beautiful dashboards and even have fancy query languages to access and transform the data. Still performance data is a secret language only a couple of people understand. The more busine...
All in Mobile is a place where we continually maximize their impact by fostering understanding, empathy, insights, creativity and joy. They believe that a truly useful and desirable mobile app doesn't need the brightest idea or the most advanced technology. A great product begins with understanding people. It's easy to think that customers will love your app, but can you justify it? They make sure your final app is something that users truly want and need. The only way to do this is by ...
DXWorldEXPO LLC announced today that Big Data Federation to Exhibit at the 22nd International CloudEXPO, colocated with DevOpsSUMMIT and DXWorldEXPO, November 12-13, 2018 in New York City. Big Data Federation, Inc. develops and applies artificial intelligence to predict financial and economic events that matter. The company uncovers patterns and precise drivers of performance and outcomes with the aid of machine-learning algorithms, big data, and fundamental analysis. Their products are deployed...