web-dev-qa-db-fra.com

Servlet vs RESTful

Aujourd'hui, j'ai lu des articles sur les services Restful. Ce que je comprends essentiellement, c’est que les services Web reposants fonctionnent sur des méthodes de requête HTTP plutôt que sur les services Web normaux sur la demande SOAP.

Quelle est la nécessité de services reposants car une servlet normale peut également fonctionner sur les méthodes HTTP?

43
Dilip

RESTful est plus un style d'architecture qu'une technologie différente. Du point de vue des serveurs, il est conçu pour être entièrement sans état et autonome au cas par cas (c’est-à-dire qu’il existe no sessions). Du point de vue du client, il s'agit davantage d'un moyen d'obtenir des informations dans différents formats via des URL avec des paramètres de chemin d'accès (auto-documentés) au lieu de paramètres de demande.

Vous pouvez sûrement le faire avec un servlet Vanilla simple, mais cela introduirait un code passe-partout pour rassembler les paramètres de chemin et générer la réponse souhaitée. JAX-RS est simplement une API pratique et autonome qui élimine le besoin d'écrire tout le code standard, ce qui permet d'obtenir un code minimal et plus auto-documenté.

En supposant que vous ayez une entité JAXB en tant que modèle, comme ci-dessous:

@XmlRootElement
public class Data {

    @XmlElement
    private Long id;

    @XmlElement
    private String value;

    // ...

    @Override
    public String toString() {
        return String.format("Data[id=%d,value=%s]", id, value);
    }

}

Et une ressource JAX-RS comme ci-dessous:

@Path("data")
public class DataResource {

    @EJB
    private DataService service;

    @GET 
    @Path("text/{id}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getAsText(@PathParam("id") Long id) {
        return String.valueOf(service.find(id));
    }

    @GET 
    @Path("xml/{id}")
    @Produces(MediaType.APPLICATION_XML)
    public Data getAsXml(@PathParam("id") Long id) {
        return service.find(id);
    }

    @GET 
    @Path("json/{id}")
    @Produces(MediaType.APPLICATION_JSON)
    public Data getAsJson(@PathParam("id") Long id) {
        return service.find(id);
    }

}

Ensuite, vous obtiendrez déjà le contenu souhaité au format approprié en:

C'est tout. Essayez de faire la même chose avec un seul Servlet Vanilla simple :) Veuillez noter que SOAP est essentiellement aussi passe par HTTP. Il s’agit essentiellement d’une couche XML supplémentaire via HTTP, et non d’un protocole réseau différent.

Voir également:

63
BalusC

À mon avis, pour une meilleure compréhension, nous devons disséquer les composants qui nous confondent et ces composants sont, 

  1. REST Concept

Le champ utilisé REST pour concevoir HTTP 1.1 et les identificateurs de ressources uniformes (URI)

  1. HTTP Protocole - Protocole de transfert hypertexte
  2. javax.servlet.http.HttpServlet classe 
  3. REST avec Java - JAX-RS et ses implémentations (comme Jersey, etc.)
  4. Autres REST Implémentations non conformes à JAX-RS (comme Spring REST) Différence entre JAX-RS et Spring Rest

Ensuite, si vous référez cette réponse pour comprendre comment ces implémentations utilisent un Servlet (un javax.servlet.http.HttpServlet concret) pour intercepter toutes les demandes entrantes. Citation importante il y a, 

Ces classes de services REST sont de simples POJO annotés pour indiquer le fichier cadre de jersey sur différentes propriétés telles que chemin, consomme, produit etc.

Ensuite, vous pouvez en savoir plus sur - Quelle est la différence entre les protocoles REST et HTTP? & Quelle est la différence entre HTTP et REST? et concluez quels sont les avantages que vous obtenez si vous rendez votre service Web RESTFul, à savoir (copié d'une réponse), 

RESTE n'est pas nécessairement lié à HTTP. Les services Web RESTful ne sont que des services Web qui suivent une architecture RESTful.

What is Rest -
1- Client-server
2- Stateless
3- Cacheable
4- Layered system
5- Code on demand
6- Uniform interface

Quel est l'avantage d'utiliser REST au lieu d'un HTTP non-REST?

Cependant, je ne voudrais pas entrer dans le débat avantages/inconvénients (avantages et inconvénients), car il est très subjectif. 

Avec les lectures ci-dessus, maintenant pour votre question, 

Quel est le besoin de services reposants en tant que servlet normal peut également fonctionner sur les méthodes HTTP?

Vous comprendrez que les cadres REST simplifient simplement la mise en œuvre des services REST au niveau de l'entreprise, mais qu'ils utilisent HTTP Servlet pour intercepter les demandes entrantes. Vous pouvez toujours utiliser des servlets simples pour implémenter vos propres services REST, mais cela prendrait tout simplement plus de temps avec beaucoup de code de plaque de chaudière. 

0
Sabir Khan