Web Service is a way of communication between two applications or electronic devices over the World Wide Web. By using Web Services, your application can publish its function or message to the rest of the world. Basically, Web Services are of two types:
1- Simple Object Access Protocol (SOAP)
2- Representational State Transfer (REST).
Servicios Web es una manera de comunicación entre dos aplicaciones o dispositivos electrónicos alrededor del World Wide Web. Usando Servicios Web, su aplicación puede publicar esta función o mensaje al resto del mundo. Básicamente, Servicios Web son de dos tipos:
1- Simple Object Access Protocol (SOAP)
2- Representational State Transfer (REST).
Why to use REST (Representational State Transfer)?
REST is a stateless, client-server, cacheable communication protocol that runs on top of the HTTP. Instead of using complex mechanism such as CORBA, RPC or SOAP to connect between machines, REST, a simple and lightweight mechanism, is used to make calls between machines. Like Web Services, a REST service is also Platform-independent, Language-independent, Standard-based (runs on top of HTTP), Firewalls independent. SOAP is an XML based message protocol and you can use it and JSON as per your need. REST does not enforce message format and while accessing RESTful resources with HTTP protocol, the URL of the source serves as the resource identifier and GET, PUT, DELETE and POST are the standard HTTP operations to be performed on that resource.
Steps to configure RESTFul Web Services in your Grails application:
Step-1: Create a Grails application
To use the plugin, first of all we need to create a new Grails application. For that, change the working directory to a location, where you want to create a new Grails application and run the command, which is given below.
grails create-app restdemo
Step-2: Installing grails-jaxrs plugin in Grails application
If your Grails version is 2.2.1 and above, add the plugin dependency declaration to your project’s ‘BuildConfig.groovy’
grails.project.dependency.resolution = {
plugins {
compile ':jaxrs:0.8'
}
}
If your Grails version is below 2.2.1, go to your project’s root directory and then run
grails install-plugin jaxrs
Step-3: Create a resource
To create a JAX-RS resource in your application, run the command given below from your application root directory.
grails create-resource user
The above command will create a UserResource.groovy file under grails-app/resources and a UserResourceTests.groovy file under test/unit. The UserResourceTests.groovy file is a unit test template. The UserResource.groovy file is the generated JAX-RS resource.
package restdemo
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
@Path('/api/user')
class UserResource {
@GET
@Produces('text/plain')
String getUserRepresentation() {
'Hello User'
}
}
It defines a single method that responds to HTTP GET operations. The HTTP response contains the return value of this method, ‘Hello User’ in this example. The content type of the response (Content-Type header) is text/plain. According to your application design, you can also change the Content-Type as accept or produce to application/json, application/xml, multipart/form-data etc. Now, add more methods (POST, PUT, DELETE) in User resource as given in the code snippet.
package restdemo
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.Consumes
import javax.ws.rs.POST
import javax.ws.rs.PUT
import javax.ws.rs.DELETE
@Path('/api/user')
class UserResource {
@GET
@Produces('text/plain')
String getUserRepresentation() {
'Hello User'
}
@POST
@Consumes(['application/json','application/xml','multipart/form-data'])
@Produces(['application/json','application/xml'])
String postUserRepresentation() {
'Hello POST Method Called'
}
@PUT
@Consumes(['application/json','application/xml','multipart/form-data'])
@Produces(['application/json','application/xml'])
String putUserRepresentation() {
'Hello PUT Method Called'
}
@DELETE
@Consumes(['application/json','application/xml'])
@Produces(['application/json','application/xml'])
String deleteUserRepresentation() {
'Hello DELETE Method Called'
}
}
Now, you have to add URL mapping dependency declaration to your project’s ‘Config.groovy’ and later the created resource will be ready to use as shown in the next section.
org.grails.jaxrs.url.mappings=['/api']
Step-4: Run your grails application
Run this command on the command line.
grails run-app
Then, open a browser window or poster and go to http://localhost:8080/restdemo/api/user. The browser should now display “Hello User” as shown below.
In this blog, I have explained you about the Integration of REST Web Services with your Grails Application.
If you have questions or need any further assistance, do write us at support@shephertz.com
Por qué usar REST (Transferencia de Estado Representacional)
REST es un stateless, cliente-servidor, protocola cacheable de comunicación que se ejecuta en la parte superior del HTTP. En lugar de usar mecanismos complejos como CORBA, RPC o SOAP para conectar entre los equipos, REST, es un mecanismo simple y ligero, es usado para hacer llamadas entre los equipos. Como Servicios Web, un servicio REST es también una Plataforma-independiente, Lenguaje-independiente, Standard-based (se ejecuta en la parte superior de HTTP), Firewalls independientes. SOAP es un protocolo de mensaje basado en XML y puede usarlo en JSON según su necesidad. REST no aplica mensaje de formato y cuando accede a recursos RESTful con protocolo HTTP, el URL del servidor de la fuente como el identificador de recursos y GET, PUT, DELETE y POST son las operaciones estándar de HTTP que son ejecutadas en ese recurso.
Pasos para configurar RESTful Web Services en su aplicación GRAILS:
Paso 1: cree una aplicación Grails
Para usar el plugin, primero que todo necesitamos crear una nueva aplicación Grails. Para eso, cambie el directorio de trabajo a un lugar, donde quiere crear una nueva aplicación Grails y ejecute el siguiente comando:
grails create-app restdemo
Paso 2: instale grails-jaxrs plugin en la aplicación Grails
Si su versión Grails es 2.2.1 o siguiente, agregue el plugin dependency declaration a su proyecto ’BuildConfig.groovy’
grails.project.dependency.resolution = {
plugins {
compile ':jaxrs:0.8'
}
}
Si su versión Grails es anterior a 2.2.1, vaya al directorio de origen del proyecto y ejecute
Paso 3: Cree un recurso
Para crear un recurso JAX-RS en su aplicación, ejecute el comando que se le da a continuación desde el directorio de origen de la aplicación.
grails create-resource user
El comando de anterior creará un archivo UserResource.groovy bajo grails-app/resources y un archivo UserResourceTests.groovy bajo test/unit. El archivo The UserResourceTests.groovy es una plantilla de prueba de unit. El archivo UserResource.groovy es el recurso JAX-RS generado.
package restdemo
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
@Path('/api/user')
class UserResource {
@GET
@Produces('text/plain')
String getUserRepresentation() {
'Hello User'
}
}
Esto define un simple método que responde a operaciones HTTP GET. La respuesta HTTP contiene el valor de retorno de este método, “Hello User” en este ejemplo. El tipo de contenido de la respuesta (encabezado Content-Type) es texto/llano. De acuerdo a su diseño de aplicación, puede cambiar también Content-Type como aceptar o producir a application/json, application/xml, multipart/form-data etc. Ahora, agregue mas métodos (POST, PUT, DELETE) en recurso User tal como figura el fragmento de código.
package restdemo
import javax.ws.rs.GET
import javax.ws.rs.Path
import javax.ws.rs.Produces
import javax.ws.rs.Consumes
import javax.ws.rs.POST
import javax.ws.rs.PUT
import javax.ws.rs.DELETE
@Path('/api/user')
class UserResource {
@GET
@Produces('text/plain')
String getUserRepresentation() {
'Hello User'
}
@POST
@Consumes(['application/json','application/xml','multipart/form-data'])
@Produces(['application/json','application/xml'])
String postUserRepresentation() {
'Hello POST Method Called'
}
@PUT
@Consumes(['application/json','application/xml','multipart/form-data'])
@Produces(['application/json','application/xml'])
String putUserRepresentation() {
'Hello PUT Method Called'
}
@DELETE
@Consumes(['application/json','application/xml'])
@Produces(['application/json','application/xml'])
String deleteUserRepresentation() {
'Hello DELETE Method Called'
}
}
Ahora, tiene que agregar URL declaración de dependencia de mapeo para su proyecto “Config.groovy” y después el recurso creado estará listo para usarse como en la siguiente sección.
org.grails.jaxrs.url.mappings=['/api']
Paso 4: ejecute su aplicación Grails
Ejecute este comando en la línea de comando
grails run-app
Entonces, abra la ventana de navegador o publique y vaya a http://localhost:8080/restdemo/api/user. El navegador ahora debería mostrar “Hello User” como se muestra abajo.
En este blog, he explicado acerca de la integración de REST WEB SERVICES con su aplicación Grails.
Si tiene alguna pregunta o necesita asistencia, escribanos a support@shephertz.com
Comment
Unfortunately you are tying your api directly to your controller and there is no abstraction. This requires redundancy of data checks, privilege checks, rules, formatting and transforms. It would be better to abstract nearer the request/response for handling to avoid redundancy and for better abstraction within your application and future abstraction in your architecture. See the Api Toolkit plugin for an example.