# Recherche best practice Rest-API (URI, Parameter, Rueckgabewerte, Fehlerbehandlung)
1.**URI**: <br/>
in URI: <br/>
- sollte man **Nomen** als Ressource verwenden <br/> Beispiel: /users, /orders
- sollte man **keine Verben** verwenden <br/> Beispiel: /getUsers, /getOrders
- sollten **collections in Plural** sein <br/> Beispiel: /articles
<br/><br/>**CRUD Operations**: <br/>
Man kann folgende Operationen auf eine Ressource machen: <br/>
**create (POST)** : um eine neue Ressource zu erstellen <br/>
**Read (GET)** : um eine Ressource abzurufen <br/>
**Update (PUT oder PATCH)** : um eine Ressource zu ersetzen (PUT) oder zu bearbeiten (PATCH) <br/>
**Delete (DELETE)** : um eine Ressource zu löschen
2.**Parameter**: <br/>
Parameter sind dafür da, um Daten zu suchen, zu filtern und zu sortieren. <br/>
- man sollte mit **query parameter** arbeiten, wenn man eine **kleine Collection** betrachtet <br/>
Beispiel: Ich möchte Details über Arbeiter aus kamerun haben<br/> http://localhost:8080/Employees?country=cameroon <br/>
- man sollte mit uri parameter arbeiten, wenn man eine große Collection betrachtet<br/> Beispiel: Ich möchte alle Details von der Abteilung 1, 2, 3 haben <br/>http://localhost:8080/Departments/123 <br/>
3.**Rückgabewerte**: sollten in Json Format sein.
4.**Fehlerbehandlung**:
Die Fehler müssen behandelt werden und entsprechenden Standardfehlercode zurückgeben: <br/># clientseitige Fehler:
**400**: Bad Request → für clientseitige Eingabe fehlgeschlagen <br/>
**401**: Unauthorized →, wenn der Benutzer nicht authentifiziert ist und versucht eine Ressource
zuzugreifen <br/>
**403**: Forbidden →, wenn der Benutzer authentifiziert ist und kein Recht hat eine Ressource
zuzugreifen <br/>
**404**: Not Found: wenn eine Ressource nicht gefunden wird <br/>
**500**: Internal server error: Standard serverseitig Fehlermeldung. wenn etwas serverseitig schiefgeht <br/>
**502**: Bad Gateway →, wenn eine Response vom Server invalid ist <br/>
**503**: Service Unavailable →, wenn etwas Unerwartetes auf der Serverseite passiert <br/>