<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Apache Wink : 1 Introduction to Apache Wink</title>
	    <link rel="stylesheet" href="styles/site.css" type="text/css" />
        <META http-equiv="Content-Type" content="text/html; charset=UTF-8">	    
    </head>

    <body>
	    <table class="pagecontent" border="0" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff">
		    <tr>
			    <td valign="top" class="pagebody">
				    <div class="pageheader">
					    <span class="pagetitle">
                            Apache Wink : 1 Introduction to Apache Wink
                                                    </span>
				    </div>
				    <div class="pagesubheading">
					    This page last changed on Sep 12, 2009 by <font color="#0050B2">bluk</font>.
				    </div>

				    <h1><a name="1IntroductiontoApacheWink-IntroductiontoApacheWink"></a>Introduction to Apache Wink</h1>

<p>Apache Wink 1.0 is a complete Java based solution for implementing and consuming REST based Web Services. The goal of the Wink framework is to provide a reusable and extendable set of classes and interfaces that will serve as a foundation on which a developer can efficiently construct applications.
<br clear="all" /></p>

<p>Wink consists of a Server module for developing REST services, and of a Client module for consuming REST services. It cleanly separates the low-level protocol aspects from the application aspects. Therefore, in order to implement and consume REST Web Services the developer only needs to focus on the application business logic and not on the low-level technical details.
<br clear="all" /></p>

<p>The Wink Developer Guide provides the developer with a rudimentary understanding of the Wink framework and the building blocks that comprise it.
<br clear="all" /></p>

<h2><a name="1IntroductiontoApacheWink-WelcometoApacheWink"></a>Welcome to Apache Wink</h2>

<p>Wink is a framework for the simple implementation and consumption of REST web services. REST is an acronym that stands for REpresentational State Transfer. REST web services are "Resources" that are identified by unique URIs. These resources are accessed and manipulated using a set of "Uniform methods". Each resource has one or more "Representations" that are transferred between the client and the service during a web service invocation.
<br clear="all" /></p>

<p>The central features that distinguish the REST architectural style from other network-based styles is its emphasis on a uniform interface, multi representations and services introspection.
<br clear="all" /></p>

<p>Wink facilitates the development and consumption of REST web services by providing the means for modeling the service according to the REST architectural style. Wink provides the necessary infrastructure for defining and implementing the resources, representations and uniform methods that comprise a service.
<br clear="all" /></p>

<h3><a name="1IntroductiontoApacheWink-RESTArchitecture"></a>REST Architecture</h3>

<p>For a detailed understanding of the REST architecture refer to the description by Roy Fielding in his dissertation, <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">The Design of Network-based Software Architectures</a>.  In particular, <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm">Chapter 5 Representational State Transfer (REST)</a> describes the principles of the architecture.</p>

<h4><a name="1IntroductiontoApacheWink-RESTWebService"></a>REST Web Service</h4>


<p>Figure 1: REST Web service design structure</p>

<p><br clear="all" />  <img src="attachments/2328642/2523181.jpg" align="absmiddle" border="0"/><br clear="all" /></p>


<p><br clear="all" />
Figure 1 demonstrates the design principles and components that comprise a REST web service. Wink reflects these design principles in the implementation of web services.
<br clear="all" /></p>



<h2><a name="1IntroductiontoApacheWink-ApacheWinkOpenDevelopment"></a>Apache Wink Open Development</h2>

<p>The purpose of this document is to provide detailed information about Wink 1.0 and describe the additional features that the Apache Wink 1.0 runtime provides in addition to the JAX-RS Java API for REST Web Service specification.
<br clear="all" /></p>

<p>In addition to the features description, this document also provides information regarding implementation specific issues.
<br clear="all" /></p>

<p>This document provides the developer with a rudimentary understanding of the Wink 1.0 framework in order to highlight the underlying concepts and precepts that make up the framework in order to create a basis for understanding, cooperation and open development of Wink.</p>

<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>JAX-RS Specification Document</b><br /> For more information on the JAX-RS functionality, refer to the JAX-RS specification document, available at the following location:<br/>
<a href="http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html">http://jcp.org/aboutJava/communityprocess/final/jsr311/index.html</a> </td></tr></table></div>


<h2><a name="1IntroductiontoApacheWink-JAXRSCompliancy"></a>JAX-RS Compliancy</h2>


<p>Apache Wink 1.0 is a complete implementation of the JAX-RS v1.0 specification.
<br clear="all" /></p>

<p>JAX-RS is a Java based API for RESTful Web Services is a Java programming language API that provides support in creating web services according to the Representational State Transfer (REST) architectural style. JAX-RS uses annotations, introduced in Java SE 5, to simplify the development and deployment of web service clients and endpoints. </p>

				    					    <br/>
                        <div class="tabletitle">
                            <a name="attachments">Attachments:</a>
                        </div>

                        <div class="greybox" align="left">
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2328642/2523182.jpg">REST Web Service.jpg</a> (image/jpeg)
                                <br/>
                                                            <img src="images/icons/bullet_blue.gif" height="8" width="8" alt=""/>
                                <a href="attachments/2328642/2523181.jpg">REST Web Service.jpg</a> (image/jpeg)
                                <br/>
                                                    </div>
				    
                    			    </td>
		    </tr>
	    </table>
	    <table border="0" cellpadding="0" cellspacing="0" width="100%">
			<tr>
				<td height="12" background="http://cwiki.apache.org/confluence/images/border/border_bottom.gif"><img src="images/border/spacer.gif" width="1" height="1" border="0"/></td>
			</tr>
		    <tr>
			    <td align="center"><font color="grey">Document generated by Confluence on Nov 11, 2009 06:57</font></td>
		    </tr>
	    </table>
    </body>
</html>