6 Stimmen

Web Service Schnittstelle - Komplexer Typ als Parameter?

Ich suche gerade nach Feedback zu bewährten Praktiken bei der Gestaltung von Web-Service-Schnittstellen.

Ich habe zwei Möglichkeiten:

Option 1

public string GetSomeData(SomeCriteriaClass criteria);

wobei SomeCriteriaClass wie folgt definiert ist:

public int ID;
public string Name;
public string Property2; etc.

Option 2

public string GetSomeData(int id, string name, string property2)

Welche Option ist die beste? Es scheint ein Konflikt zwischen den Entwurfsmustern zu sein - das eine ist, die Parameter in einer Klasse zu verpacken, aber das andere ist, die Webdienstschnittstelle flexibel und offen zu halten.

Die zweite Frage ist - wenn wir uns für Option 1 entscheiden - wie rufen Sie diese über eine URL auf?

Gracias

2voto

Dan Punkte 1163

Sie können den harten Weg gehen und Option 1 mit SOAP implementieren. Mit SOAP können Sie komplexe Datentypen definieren. Andererseits können Sie es auf die "hack"-Weise machen, wie in Option #2, indem Sie REST verwenden und einfach die Parameter entweder in der URL oder in der HTTP-POST-Nachricht kodieren.

2voto

Vizu Punkte 1801

Der Begriff "Webdienst" wird häufig für zwei verschiedene Dinge verwendet.

  • Eine Technologie: Verwendung von HTTP(S) als Protokoll für die Kommunikation zwischen Prozessen.

  • Ein architektonischer Ansatz: Dienstorientierte Architektur.

Wenn wir über Webdienste als Technologie sprechen, haben Sie viele Möglichkeiten: Sie können HTTP GET (dies ist die Verwendung von URL-Parametern) oder HTTP POST (die Daten befinden sich im Körper der HTTP-Nachricht) verwenden. Bei HTTP POST kann die Nutzlast SOAP oder ein beliebiges proprietäres Material sein.

Wenn wir über einen dienstorientierten Ansatz und Webdienste als Werkzeug sprechen, dann ist HTTP+SOAP der Standardweg.

Wenn wir eine Webdienstmethode nur als eine Implementierung einer Dienstoperation betrachten, dann verwenden wir die nachstehende Signatur, die diesen Ansatz unterstreicht:

public FooResponse FooOperation(FooRequest request);

Das bedeutet, dass eine Operation ein Anforderungs- und ein Antwortdokument hat (auch wenn eines davon leer ist), und Sie können den Dienstleistungsvertrag (welche Operationen Sie bereitstellen) und den Datenvertrag (wie Sie die Anforderungs- und Antwortnachrichten zusammenstellen) trennen. In diesem Artikel finden Sie weitere Einzelheiten dazu: Grundsätze der Dienstgestaltung Dienstmuster und Anti-Muster

Schlussfolgerung:

  • Wenn Sie sich nicht um SOA kümmern, sondern nur eine Methode über HTTP aufrufen wollen, ist Option 2 klar und einfach.
  • Wenn Sie jedoch SOA-Dienste erstellen, verwenden Sie die "dokumentenzentrierte" Signatur. Option 1 ist eine Mischung aus beidem und wird nicht empfohlen.

1voto

Option 1 public string GetSomeData(SomeCriteriaClass criteria); ist ein guter Weg, um einen Webservice zu implementieren, da hier SOAP und dokumentenorientierte Begriffe verwendet werden. Und Option 2 ist für einfache Java-Entwickler, die sich nicht zu sehr auf Entwurfsmuster konzentrieren.

Nehmen wir Szenario - Nach der Verwendung von Option 2, nehmen wir an, Sie wollen 3 weitere varibale in SomeCriteriaClass.java dann hinzufügen, welche Art und Weise Sie wählen fügen Sie 3 weitere Parameter zu GetSomeData() Methode oder deklarieren in SomeCriteriaClass.java.

Eine gute Design-Muster folgen, wählen Sie in SomeCriteriaClass.java zu erklären, nicht in GetSomeData() hinzuzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X