Trace:
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
de:jvx:common:util:rest [2018/02/08 08:38] admin |
de:jvx:common:util:rest [2019/03/13 09:04] admin |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ~~Title: REST Service~~ | + | ~~Title: REST Dienste~~ |
Wir definieren die Business Logik mit [[de:jvx:server:lco:objects|Life-Cycle Objekten]] am Server. Die Zugriffsberechtigung einer Applikation wird durch einen [[de:jvx:server:security:manager|Security Manager]]geprüft. Der Zugriff auf die Business Logik erfolgt üblicherweise via Master- oder SubConnections vom Client. | Wir definieren die Business Logik mit [[de:jvx:server:lco:objects|Life-Cycle Objekten]] am Server. Die Zugriffsberechtigung einer Applikation wird durch einen [[de:jvx:server:security:manager|Security Manager]]geprüft. Der Zugriff auf die Business Logik erfolgt üblicherweise via Master- oder SubConnections vom Client. | ||
Line 5: | Line 5: | ||
Um die Technologie Unabhängigkeit zu vollenden, steht die Komplette Business Logik einer Applikation auch via REST zur Verfügung. | Um die Technologie Unabhängigkeit zu vollenden, steht die Komplette Business Logik einer Applikation auch via REST zur Verfügung. | ||
- | Für die Benützung der REST Services ist die Autentifizierung mit Benutzername und Passwort notwendig. Als Authentifizierungsmechanismus wird [[https://de.wikipedia.org/wiki/HTTP-Authentifizierung#Basic_Authentication|BASIC]] erwendet Die Überprüfung der Daten wird vom Security Manager der Applikation wie gewohnt durchgeführt. Sie müssen für die Integration der REST Services keine Zeile Source Code verändern. | + | Für die Benützung der REST Dienste ist die Autentifizierung mit Benutzername und Passwort notwendig. Als Authentifizierungsmechanismus wird [[https://de.wikipedia.org/wiki/HTTP-Authentifizierung#Basic_Authentication|BASIC]] erwendet Die Überprüfung der Daten wird vom Security Manager der Applikation wie gewohnt durchgeführt. Sie müssen für die Integration der REST Dienste keine Zeile Source Code verändern. |
=====Funktionsweise===== | =====Funktionsweise===== | ||
- | Die REST Implementierung in JVx wurde mit [[http://www.restlet.org/|Restlet]] umgesetzt. Um die REST Services zu nutzen, muss der Deployment Deskriptor wie folgt konfiguriert werden: | + | Die REST Implementierung in JVx wurde mit [[http://www.restlet.org/|Restlet]] umgesetzt. Um die REST Dienste zu nutzen, muss der Deployment Deskriptor wie folgt konfiguriert werden: |
<file xml> | <file xml> | ||
Line 30: | Line 30: | ||
Mit dieser Konfiguration stehen folgende Services zur Verfügung: | Mit dieser Konfiguration stehen folgende Services zur Verfügung: | ||
- | ===== Verfügbare Services ===== | + | ===== Verfügbare Dienste ===== |
- | ====Storage Zugriff (CRUD, Meta Data)==== | + | ==== Administration ==== |
+ | |||
+ | Für die Administration stehen unterschiedliche Dienste zur Verfügung. Diese können im Standardfall nur mittels POST Requests verwendet werden. Falls jedoch benutzerdefinierte Admin-Dienste registriert wurden, können diese auch mittels GET Request angesprochen werden. | ||
+ | |||
+ | Folgende Dienste stehen standardmässig zur Verfügung: | ||
+ | |||
+ | * [[#anmeldung_testen|Anmeldung testen]] | ||
+ | * [[#passwort_aendern|Passwort ändern]] | ||
+ | |||
+ | === Anmeldung testen === | ||
+ | |||
+ | Anmeldung testen:\\ | ||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>testAuthentication</fc>**'' \\ | ||
+ | oder \\ | ||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>testAuthentication</fc>**/**<fc #BF0000>parameter</fc>**'' | ||
+ | |||
+ | Der Request benötigt eine HashMap im JSON Format. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <file json> | ||
+ | { "username" : "admin", | ||
+ | "password" : "adminpassword" | ||
+ | } | ||
+ | </file> | ||
+ | |||
+ | Der Benutzername kann auch weggelassen werden. In diesem Fall wird dann der Parameter aus dem URL als Benutzername verwendet. | ||
+ | |||
+ | == POST-Response == | ||
+ | |||
+ | Wenn die Anmeldung erfolgreich war, wird kein Response generiert und der Status Code ist 204 (SUCCESS_NO_CONTENT). | ||
+ | |||
+ | === Passwort ändern === | ||
+ | |||
+ | Anmeldung testen:\\ | ||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>changePassword</fc>**'' \\ | ||
+ | oder \\ | ||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>changePassword</fc>**/**<fc #BF0000>parameter</fc>**'' | ||
+ | |||
+ | Der Request benötigt eine HashMap im JSON Format. | ||
+ | |||
+ | Beispiel: | ||
+ | |||
+ | <file json> | ||
+ | { "username" : "admin", | ||
+ | "oldpassword" : "oldpassword", | ||
+ | "newpassword" : "newpassword" | ||
+ | } | ||
+ | </file> | ||
+ | |||
+ | Der Benutzername kann auch weggelassen werden. In diesem Fall wird dann der Parameter aus dem URL als Benutzername verwendet. | ||
+ | |||
+ | == POST-Response == | ||
+ | |||
+ | Wenn das Passwort geändert wurde, wird kein Response generiert und der Status Code ist 204 (SUCCESS_NO_CONTENT). | ||
+ | |||
+ | === Benutzerdefinierte Dienste === | ||
+ | |||
+ | Wenn man einen eigenen Dienst zur Laufzeit registrieren möchte, kann dies mittels | ||
+ | |||
+ | <code java> | ||
+ | AdminService.register(String pApplicationName, String pAction, IAdminServiceDelegate pDelegate); | ||
+ | AdminService.unregister(String pApplicationName, String pAction, Class<? extends IAdminServiceDelegate> pClass) | ||
+ | </code> | ||
+ | |||
+ | erfolgen. Der Dienst kann entweder per GET oder POST Request angesprochen werden, je nachdem ob **//IAdminServiceGetDelegate//** oder **//IAdminServicePostDelegate//** verwendet wird. | ||
+ | |||
+ | Der Aufruf erfolgt mittels: | ||
+ | |||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>ACTION</fc>**'' \\ | ||
+ | oder \\ | ||
+ | ''<nowiki>http://server:port/webapp/services/rest/</nowiki>**<fc #BF0000>APPLICATION_NAME</fc>**/**<fc #BF0000>LIFECYCLE_CLASS</fc>**/_admin/**<fc #BF0000>ACTION</fc>**/**<fc #BF0000>parameter</fc>**'' | ||
+ | |||
+ | ==== Storage Zugriff (CRUD, Meta Data) ==== | ||
* [[#get-request_select|Select]] | * [[#get-request_select|Select]] | ||
Line 375: | Line 448: | ||
===== Anwendungsbeispiele ===== | ===== Anwendungsbeispiele ===== | ||
+ | |||
+ | ==== Integration ==== | ||
Mittels php: | Mittels php: | ||
Line 393: | Line 468: | ||
\\ | \\ | ||
- | [[https://blog.sibvisions.com/2017/10/23/angularjs-4-with-visionx-and-jvx-rest-services/|AngularJS 4 with VisionX and JVx REST services]] | + | [[https://blog.sibvisions.com/2017/10/23/angularjs-4-with-visionx-and-jvx-rest-services/|AngularJS 4 with VisionX and JVx REST services]] \\ |
- | [[https://blog.sibvisions.com/2015/06/15/angularjs-with-jvx-in-action/|AngularJS with JVx in action]] | + | [[https://blog.sibvisions.com/2015/06/15/angularjs-with-jvx-in-action/|AngularJS with JVx in action]] \\ |
- | [[https://blog.sibvisions.com/2016/02/29/using-oracle-jet-with-visionxjvx/|Oracle JET with VisionX/JVx]] | + | [[https://blog.sibvisions.com/2016/02/29/using-oracle-jet-with-visionxjvx/|Oracle JET with VisionX/JVx]] \\ |
+ | |||
+ | ==== JUnit Tests ==== | ||
+ | |||
+ | [[https://sourceforge.net/p/jvx/code/HEAD/tree/trunk/java/library/test/com/sibvisions/rad/server/http/rest/TestCallService.java|TestCallService]] für die Lifecycle Objekte: [[https://sourceforge.net/p/jvx/code/HEAD/tree/trunk/java/library/rad/apps/demo/src.server/demo/Session.java|Session]] und [[https://sourceforge.net/p/jvx/code/HEAD/tree/trunk/java/library/rad/apps/demo/src.server/demo/special/Address.java|Address]] | ||
\\ | \\ |