Introduction
Les WebServices de type REST (Representational state transfer)
REST n'est pas un protocole ou un format, c'est un style d'architecture, c'est le style architectural original du Web. L'application de cette architecture au Web se comprend sur quelques principes simples :
- l'URI est important : connaître l'URI doit suffire pour nommer et identifier une ressource.
- GET pour la récupération de données.
- PUT pour créer des données
- POST pour la mise à jour.
- DELETE pour supprimer des données
Grails> create-app GrailsRestCette commande nous permet de créer un projet nommé GrailsRest. Ressource : La ressource que nous allons traiter ici est un simple client avec les attributs firstName , lastName et zipcode. Créer « User.groovy » dans « grails-app/domain »
URLMappings: Mise à jour de la class "UrlMappings" qui ce trouve sous « grails-app/conf »class User { String firstName String lastName String zipcode }
class UrlMappings {
static mappings = {
"/user" (controller: "user") {
action = [GET:"list", POST: "create"]
}
"/user/$id" (controller: "user") {
action = [GET: "show", PUT:"update", DELETE:"delete"]
}
}
}
Contrôleur:
Créer UserController.groovy dans « grails-app/controller », et nous allons
commencer à travailler sur les opérations REST de notre ressource
la meme chose pour JSON
import grails.converters.XML
class UserController {
//---------------------- Create------------------------------
def create = {
def xml = request.XML
def user = new User()
user.firstName = xml.firstName.text()
user.lastName = xml.lastName.text()
user.zipcode = xml.zipcode.text()
if (user.validate()) {
user.save();
response.status = 201
render user as XML
} else {
sendValidationFailedResponse(user, 403)
}
}
private def sendValidationFailedResponse(user, status) {
response.status = status
render contentType: "application/xml", {
errors {
user?.errors?.fieldErrors?.each {err ->
field(err.field)
message(g.message(error: err))
}
}
}
}
//------------------------ Read-------------------------------
def list = {render User.list() as XML}
def show = {
User user = User.get(params.id)
if (user) {
render user as XML
} else {
SendNotFoundResponse()
}
}
private def SendNotFoundResponse() {
response.status = 404
render contentType: "application/xml", {
errors {
message("User not found with id: " + params.id)
}
}
}
//------------------------ Update-------------------------------
def update = {
User user = User.get(params.id)
if (!user) {
SendNotFoundResponse() }
def xml = request.XML
user.firstName = xml.firstName.text()
user.lastName = xml.lastName.text()
user.zipcode = xml.zipcode.text()
if (user.validate()) {
user.save();
response.status = 201
render ""
} else {
sendValidationFailedResponse(user, 403)
}
}
//------------------------ Delete-------------------------------
def delete = {
User user = User.get(params.id)
if (!user) {
SendNotFoundResponse()
}
user.delete();
response.status = 204
render ""
}
}
Teste: Exécutez la ligne de commande :
Grails> run-app
Pour tester notre WebService avec les différentes opérations; on va utiliser un client virtuel : « RESTClient » (installer ce plugin sur firefox https://addons.mozilla.org/fr/firefox/addon/restclient ) PUT GET