it-swarm.com.de

Servlet vs RESTful

Heute habe ich über Restful Services gelesen. Grundsätzlich verstehe ich, dass Restful Webservices mit HTTP-Anforderungsmethoden und nicht mit normalem Webservice mit SOAP -Anfragen funktionieren.

Was ist für Restful-Services erforderlich, da ein normales Servlet auch mit den HTTP-Methoden arbeiten kann?

43
Dilip

RESTful ist mehr ein Architekturstil als eine andere Technologie. Aus Serverperspektive ist er so konzipiert, dass er auf Anforderungsebene vollständig zustandslos und in sich abgeschlossen ist (d. H. Es gibt keine - Sitzungen). Aus Kundensicht ist es eher eine Möglichkeit, Informationen in verschiedenen Formaten über URLs mit (selbstdokumentierenden) Pfadparametern anstelle von Anforderungsparametern abzurufen.

Sicherlich können Sie dies mit einem einfachen Vanilla-Servlet tun, aber es würde einen Boilerplate-Code einführen, um die Pfadparameter zu erfassen und die gewünschte Antwort zu generieren. JAX-RS ist nur eine bequeme und in sich geschlossene API, die es unnötig macht, den gesamten Boilerplate-Code selbst zu schreiben.

Angenommen, Sie haben eine JAXB-Entität als Modell wie folgt:

@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);
    }

}

Und eine JAX-RS-Ressource wie folgt:

@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);
    }

}

Dann erhalten Sie den gewünschten Inhalt bereits im richtigen Format durch:

Das ist es. Versuchen Sie dasselbe mit einem einfachen Vanilla Servlet. :) Bitte beachten Sie, dass SOAP im Wesentlichen auch über HTTP geht. Es ist im Grunde eine zusätzliche XML-Schicht über HTTP, kein anderes Netzwerkprotokoll.

Siehe auch:

63
BalusC

Meines Erachtens müssen wir zum besseren Verständnis Komponenten analysieren, die uns verwirren, und diese Komponenten sind: 

  1. REST Konzept

Fielding verwendete REST, um HTTP 1.1 und Uniform Resource Identifiers zu entwerfen (URI)

  1. HTTP Protokoll - Hypertext Transfer Protocol
  2. javax.servlet.http.HttpServlet klasse 
  3. REST mit Java - JAX-RS und seinen Implementierungen (wie Jersey usw.)
  4. Andere REST Implementierungen, die nicht JAX-RS entsprechen (wie Spring REST) Unterschied zwischen JAX-RS und Spring Rest

Wenn Sie dann diese Antwort referenzieren, um zu verstehen, wie diese Implementierung ein Servlet (einen konkreten javax.servlet.http.HttpServlet) verwendet, um alle eingehenden Anforderungen abzufangen. Wichtiges Zitat gibt es, 

Diese REST - Serviceklassen sind einfache POJOs, die mit Anmerkungen versehen sind, um die Jersey-Rahmen über verschiedene Eigenschaften wie Pfad, verbraucht, produziert etc.

Dann können Sie weiter lesen über - Was ist der Unterschied zwischen REST und HTTP-Protokollen? & Was ist der Unterschied zwischen HTTP und REST? und daraus schließen, welche Vorteile Sie haben, wenn Sie Ihren Webservice RESTFul machen, und zwar (aus einer Antwort kopiert), 

REST ist nicht unbedingt an HTTP gebunden. RESTful-Webdienste sind nur Webdienste, die einer RESTful-Architektur folgen.

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

Was ist der Vorteil der Verwendung von REST anstelle von Nicht-REST-HTTP?

Ich würde jedoch nicht gerne in die Vorteile - Nachteile (Pros & Contras) debattieren, da dies sehr subjektiv ist. 

Mit obigen Lesungen, jetzt zu Ihrer Frage, 

Was ist der Bedarf an Restful-Diensten, da ein normales Servlet auch funktionieren kann auf den HTTP-Methoden?

Sie würden verstehen, dass REST -Frameworks die Implementierung von REST -Diensten auf Unternehmensebene vereinfachen, sie verwenden jedoch HTTP-Servlet, um eingehende Anforderungen abzufangen. Sie können immer einfache Servlets verwenden, um Ihre eigenen REST - Dienste zu implementieren. Dies wäre jedoch mit viel Boilerplate-Code zeitaufwendiger. 

0
Sabir Khan