REST- Services GET/PUT/POST/DELETE

PollerJava

Top Contributor
Hallo,

mir ist gurndsätlich klar, wie man RESTful - Services schreibt:

Java:
  @RequestMapping(value = "{id}", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody User get(@PathVariable
    final String id)  {
      ...
    }

    @RequestMapping(value = "", method = { RequestMethod.POST }, produces = "application/json")
    public @ResponseBody User create(final @RequestBody User user) throws BusinessException {
        ...
    }

    @RequestMapping(value = "{id}", method = RequestMethod.PUT, consumes = "application/json", produces = "application/json")
    public @ResponseBody User update(@PathVariable String id, @RequestBody User user) throws BusinessException {
	...
    }

Mir ist nur nicht klar, wie man "getAllUsers" RESTful macht,
entweder so:
Java:
    @RequestMapping(value = "/getAll", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody List<User> getAll() throws BusinessException {
        ...
    }

oder so wie unten die oben angeführte Methode verwenden und indem ich id=null lasse und dies in dieser Methode unten überprüfe.
Code:
@RequestMapping(value = "{id}", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody User get(@PathVariable
    final String id)  {
        if (id == null) {
            // alle User zurückgeben
         }
      ...
    }

Ich wär dankbar für einen Tip in diese Richtung!
Danke!
Poller
 
Zuletzt bearbeitet:

stg

Top Contributor
Grundsätzlich beides möglich, nur müsstest du im zweiten Fall dann auch immer bei der Anfrage nach einem speziellen User eine List zurückgeben, auch wenn diese nur ein Element enthält ....
Die erste Variante finde ich sauberer, aber das ist in erster Linie Geschmackssache und nur eine Frage davon, wie die Schnittstelle definiert wurde.
 

PollerJava

Top Contributor
Ich hätte dazu noch eine Frage.
Ein User arbeitet in einem Unternehmen und ein Unternehmen hat mehrere User/Angestellte.

Meine Frage wäre, wie man das in einem RestService abbildet?
Wenn User A (Chef von Unternehmen A) sich einloggt, soll er seine Mitarbeiter sehen, wenn User B (Chef von Unternehmen B) sich einloggt, dann soll er natürlich sein/andere Mitarbeiter sehen.

Macht man das so (mit userId):
Java:
@RequestMapping(value = "/{userId}/getAll", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody List<User> getAll() {

oder so (mit companyId)
Java:
@RequestMapping(value = "/{companyId}/getAll", method = RequestMethod.GET, produces = "application/json")
    public @ResponseBody List<User> getAll() {

oder soll man in der Methode getAll bestimmen (über den Login- Token), um welchen User es sich handelt.

Danke!
Poller
 

stg

Top Contributor
Kommt darauf an... :)

Daten von Mitarbeitern sind aber in der Regel vertraulich und sollten nur intern einsehbar sein. Und auch dort vermutlich nicht von jedem. Also z.B. entweder anhand der Principal-Informationen programmatisch prüfen, welche Werte zurückgegeben werden soll, oder (aber das ist dann statischer) über die User-Rolle prüfen. Bei deinen ersten beiden Vorschlägen muss ja sonst nur jemand die entsprechende ID kennen und hat dann plötzlich vollen Zugriff auf die Daten..
 

PollerJava

Top Contributor
da hast du sicher recht, die Services sind aber eh zwei mal abgesichert:

1. mit einem token
2. mit https

Ich kenne die Vor und Nachteile dieser zwei Punkte.
Mir geht es eher um den RESTful- Ansatz - kann man das so machen oder wie würdet ihr das machen?
Danke!
 

stg

Top Contributor
Dann ist es wiederum nur eine Frage, wie die Schnittstelle definiert wurde.

RESTful ist nicht so streng standardisiert. Ich hab gerne optionale Parameter als GET-Paramter und nicht-optionale als Pfad-Parameter. Aber das ist eigentlich auch nur eine Frage des Geschmacks. Viel wichtiger finde ich, dass man es einheitlich handhabt.

In dem speziellen Fall hier würde ich es vermütlich so benennen:

/company/{companyid}/users (um alle User zu bekommen)
/company/{companyid}/user/{userid} (um einen speziellen user zu bekommen)
 

PollerJava

Top Contributor
Eine kurze Nachfrage noch: wenn ich das so mache wie oben, würdest du diese Methoden dann in einer Klasse geben, die so ausschaut:

Java:
@RestController
@RequestMapping("/users")
public class UserRestService {

oder eher in diese:

Java:
@RestController
@RequestMapping("/institutions")
public class InstitutionRestService {
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand SOAP Rest Spring Boot Allgemeine Java-Themen 5
Meeresgott Best Practice Mini REST-Schnittstelle Allgemeine Java-Themen 4
OnDemand REST Client programmierens Allgemeine Java-Themen 4
C Nested JSON in Java ansprechen [Wordpress Rest Api] Allgemeine Java-Themen 26
RalleYTN REST API ResponseType application/pdf lesen Allgemeine Java-Themen 0
I REST Webservice getFile Allgemeine Java-Themen 2
Tobse HTTP REST API's in SQL schreiben Allgemeine Java-Themen 1
G REST- Object darstellung Allgemeine Java-Themen 6
F HTTP REST und DELETE Allgemeine Java-Themen 9
G REST Client / URL Parser Allgemeine Java-Themen 2
C Sound stoppt Rest & Lautstärke-Problem Allgemeine Java-Themen 4
I Vom Monolith zu Services in einer Webseite Allgemeine Java-Themen 1
L Erste Schritte TDD testen einer Methode mit injezierten Services? Allgemeine Java-Themen 12
RalleYTN META-INF/services Problem Allgemeine Java-Themen 3
G Services verwenden sich gegenseitig Allgemeine Java-Themen 4
G DesignPattern Verschiedene Services Allgemeine Java-Themen 4
M Probleme mit Web Services Allgemeine Java-Themen 3
B mehrere services in einem client Allgemeine Java-Themen 10
E Schneller Einstieg in Java und Web Services Allgemeine Java-Themen 3
J Services - Programme laden (Speicherproblem?) Allgemeine Java-Themen 7
G Json POST-REQUEST Allgemeine Java-Themen 14
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
J Post: #1could not create the java virtual machine etc Allgemeine Java-Themen 6
J Übergabe von post request Parametern Allgemeine Java-Themen 9
S http POST überwachen Allgemeine Java-Themen 2
S OutputStream via POST senden Allgemeine Java-Themen 4
dayaftereh HttpClient Post, Get Cookie Allgemeine Java-Themen 1
P POST Problem Allgemeine Java-Themen 5
A POST Allgemeine Java-Themen 6
J httpclient: Post-method aber trotzdem "URI to long&quot Allgemeine Java-Themen 4
thE_29 CGI Seite + Post Methoden Allgemeine Java-Themen 2
P URL mit POST variablen aufrufen Allgemeine Java-Themen 5
P Post-Parameter übergeben Allgemeine Java-Themen 3
N Servlets: Formulardaten auslesen (POST) - mehr Informationen Allgemeine Java-Themen 4
A Formular POST übergabe an Servlet Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben