Um die ganzen technischen Features der Server-Anwendung für die Allgemeinheit zur Verfügung zu stellen, habe ich eine neue Anwendung erstellt, die alleinstehend und außerhalb des Oregami-Kontextes lauffähig und sinnvoll ist und eine klassische "ToDo-Applikation" darstellt. Ihr wisst schon: eine Liste von Dingen (Name, Beschreibung, Status, ...), die man noch erledigen muss.
Die Anwendung enthält momentan die folgenden technischen Features:
- REST-Anwendung basierend auf Dropwizard Version 0.7.0
- Dependency Injection mit Google Guice
- Hibernate / JPA 2.1 als Persistenz-Framework
- HSQLDB als (In-Memory-)Datenbank
- "Transaction-per-HTTP-request" mit Guice PersistentFilter
- Unterstützung für cross-origin resource sharing
- JPA Entitäten mit UUIDs als Identifikator
- Ein Muster für den Zugriff und die Manipulation von Entitäten über REST Aufrufe
(Ressource => Service => DataAccessObject) - Ein Muster für Service-Aufruf-Ergebnisse, welche Fehlermeldungen enthalten können, inkl. der Information, bei welchem Feld der Anwendung der Fehler aufgetreten ist. Auf diese Weise kann später in der Weboberfläche die Fehlermeldung an der richtigen Stelle eingeblendet werden.
- Durchgehende JUnit-Tests zur Absicherung der korrekten Funktionalität
- Authentifizierung
- Hypermedia mit HATEOAS
- komplexere Entitäten (1-zu-n-Beziehungen)
Der Sourcecode steht bei Github unter dem Namen dropwizard-guice-jpa-seed für jedermann zur Verfügung.
Disclaimer: Es kann natürlich sein, dass ihr Dinge findet, die man besser machen kann. In diesem Fall helft gerne mit, die Anwendung zu verbessern! Geht bei Github über die üblichen Pull-Requests. Das gilt natürlich auch für neue, noch fehlende Features!
Hinweise für Enwtickler
Die Anwendung kann gestartet werden über die Klasse "ToDoApplication" mit den Parametern "server todo.yml".
Auflisten der aktuell gespeicherten Tasks über:
GET => http://localhost:8080/task
Hinzufügen eines neuen Tasks über:
POST => http://localhost:8080/task
Header:
Content-Type:application/json
JSON-Body z.B. :
{"name" : "task 1", "description" : "This is a description"}
Modifizieren eines Tasks über:
PUT => http://localhost:8080/task/[id]
Header:
Content-Type:application/json
Accept:application/json
JSON-Body z.B.:
{
"id": "402880944687600101468760d9ea0000",
"version": "0",
"name": "task 1 with new name",
"description": "This is an updated description",
"finished": "false"
}
Ich empfehle die Chrome-Erweiterung Postman, um solche HTTP-Aufrufe durchzuführen!
Keine Kommentare:
Kommentar veröffentlichen