URI Schema » History » Version 35

S. Wrede, 04/12/2011 09:07 PM

1 1 J. Wienke
h1. URI Schema
2 1 J. Wienke
3 31 S. Wrede
h2. Storming, Norming, Forming. Let's continue...
4 31 S. Wrede
5 31 S. Wrede
Next proposal:
6 31 S. Wrede
7 31 S. Wrede
<pre>
8 31 S. Wrede
Code-Level
9 31 S. Wrede
ServiceComponent --> ServiceProvider | ServiceConsumer --> Bindings --> Port
10 31 S. Wrede
11 35 S. Wrede
Participant -?-> ServiceComponent (Wichtig: Differenz zu Domain-Modell: ServiceComponent ist Container für mehrere Informer / Listener und damit unabhängige Instanz und nicht nur Oberklasse)
12 33 S. Wrede
Informer    --> ServiceProvider
13 33 S. Wrede
Listener    --> ServiceConsumer
14 33 S. Wrede
15 31 S. Wrede
Modell-Level
16 31 S. Wrede
Service (1:n ServiceComponents) --> Interface (1:n ServiceProvider | ServiceConsumer)  : Port (1:n Ports)
17 31 S. Wrede
18 34 S. Wrede
Alternative Sichtweise:
19 34 S. Wrede
Service (1:n Participants) --> Interface (1:n Informer | Listener)  : Port (1:n Ports)
20 34 S. Wrede
21 31 S. Wrede
URL-Level
22 31 S. Wrede
generisch:
23 31 S. Wrede
rsb://dns/service-path/element-path/ (plus User-definable actions)
24 31 S. Wrede
spezifisch:
25 31 S. Wrede
spread://dns/service-path/element-path/ (plus User-definable actions)
26 31 S. Wrede
27 31 S. Wrede
cf.
28 31 S. Wrede
http://download.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html
29 31 S. Wrede
30 31 S. Wrede
Client:
31 31 S. Wrede
ServiceComponent (ImageImport, Base-URL: facedetection)
32 31 S. Wrede
ServiceConsumer (SUB-ActionBinding, Context-URL: /images)
33 31 S. Wrede
34 31 S. Wrede
Server-URLs:
35 31 S. Wrede
ServiceComponent (hal, Base-URL: hal)
36 31 S. Wrede
ServiceProvider (PUB, GET-ActionBinding, Context-URL: /cam/left/img))
37 31 S. Wrede
ServiceProvider (PUB, GET-ActionBinding, Context-URL: /cam/right/img))
38 31 S. Wrede
39 31 S. Wrede
Modell-Level
40 31 S. Wrede
Facedetection: Service (cam-interface, gemappt auf base-url, und entsprechenden actions, ports)
41 31 S. Wrede
HAL: Service (diverse interfaces, eines davon: cam, gemappt auf base
42 31 S. Wrede
43 31 S. Wrede
</pre>
44 31 S. Wrede
45 31 S. Wrede
* Actions sind Event Metadaten auf die man mit Framework-Support filtern kann
46 31 S. Wrede
* Service erlaubt lokales Anhängen von Action Listenern und Publishern unter einem URL Namensraum
47 32 S. Wrede
* Beispiel: ISR param (get+set)
48 31 S. Wrede
* Pfad-Teil der URI ist erstmal völlig frei
49 31 S. Wrede
* Composites, Services und Element-URIs ergeben sich aus Modellierung, Anordnung von ServiceElementen
50 31 S. Wrede
* Domain-Teil ist Deployment
51 31 S. Wrede
* Zugriff über spezifisches Protokoll damit direkt möglich, z.B. Http
52 31 S. Wrede
* RSB prefix mit Modell erlaubt logischen Zugriff mit location transparency
53 1 J. Wienke
54 10 S. Wrede
h2. Just Brainstorming
55 10 S. Wrede
56 17 S. Wrede
* Ziel: Kein deployment und kein Transport in der URL!
57 1 J. Wienke
* Ziel: Location-Transparency auf logischer Ebene
58 17 S. Wrede
* Ziel: Einfachheit
59 1 J. Wienke
* Modell enthält das Deployment
60 19 S. Wrede
* Ziel: Redeployment darf keine Code-Änderungen nach sich ziehen
61 19 S. Wrede
* Ziel: URLs werden über das Modell umkonfiguriert
62 19 S. Wrede
* Ziel: Subscriptions werden auch über Modell konfiguriert für statischen Deployment-Kontext (Datentypen, Scopes)
63 20 S. Wrede
* User konfiguriert ID Modell-invariant im Code 
64 20 S. Wrede
* Ports sind atomare Einheiten der Kommunikation (wie in RSB)
65 26 J. Wienke
* Composite = Scope? Insgesamt aber gewünscht
66 27 S. Wrede
* -Binding ist Instantiierung eines Patterns, sollte in der URL repräsentiert sein, besserer Name?-
67 27 S. Wrede
* Binding ist Instantiierung einer REST Aktion (und impliziert die Verwendung bestimmter Port-Kombinationen)
68 1 J. Wienke
* Interface ist ein logisches Modellelement und nicht Teil der URL (kann für Verifikation von Serviceinterfaces benutzt werden)
69 1 J. Wienke
* Service ist Abbildung von Bindings / Rest Actions auf eine URL. Beispiel, siehe (1)
70 1 J. Wienke
71 1 J. Wienke
<pre>
72 30 S. Wrede
rsb://scopeA.scopeB/service/element-path?filter=cond&param=n
73 30 S. Wrede
74 30 S. Wrede
rsb://hal.cam.left/status/.../.../123?xpath=foo&timing=12 hal.cam.left eq. scopes, status eq. service
75 30 S. Wrede
76 22 S. Wrede
rsb://isr/hyp        --> hyp  binding type: publish, port types: spread, local
77 22 S. Wrede
rsb://isr/conf       --> conf binding type: rpc server, port types: 
78 22 S. Wrede
79 22 S. Wrede
Remote Anfrage:      --> rsb://isr/conf/req/out --> Alle Nachrichten, die über verschiedene Transports des gleichen logischen Ports kommuniziert werden
80 29 S. Wrede
81 29 S. Wrede
                     --> rsb+spread://isr/conf/req/out --> Nachrichten, die über spread Transport des gleichen logischen Ports geschickt werden
82 29 S. Wrede
</pre>
83 1 J. Wienke
84 27 S. Wrede
REST Style Services
85 27 S. Wrede
<pre>
86 27 S. Wrede
Kamera-Server: zwei Kameras
87 27 S. Wrede
88 27 S. Wrede
(1) rsb://hal.cam/left/images --> Kamerabild (GET, SUB)
89 28 S. Wrede
(1a) Introspection URIs: rsb://hal.cam/left/images/?out
90 27 S. Wrede
(2) rsb://hal.cam/left/params --> Parameters (PUT, GET, POST, SUB)
91 27 S. Wrede
(3) rsb://hal.cam/right/images
92 27 S. Wrede
(4) rsb://hal.cam/right/params
93 27 S. Wrede
94 27 S. Wrede
GET 	PUT 	POST 	DELETE
95 27 S. Wrede
96 27 S. Wrede
Sender | Empfänger
97 27 S. Wrede
98 27 S. Wrede
GET  (1)  --> gibt mir das Kamerabild zurück: In- / Out-Port | In- / Out-Port
99 27 S. Wrede
POST (2)  --> setzt neue Parameter: Out-Port | In-Port
100 27 S. Wrede
SUB  (3)  --> lesen von state changes: In-Port
101 27 S. Wrede
102 27 S. Wrede
103 27 S. Wrede
104 27 S. Wrede
ServiceProvider vs. ServiceUser?
105 27 S. Wrede
106 27 S. Wrede
Aktualisieren von Information
107 27 S. Wrede
108 27 S. Wrede
109 27 S. Wrede
rsb://
110 27 S. Wrede
Query
111 27 S. Wrede
Subscription 
112 27 S. Wrede
Publisher 
113 27 S. Wrede
</pre>
114 22 S. Wrede
115 21 S. Wrede
* Logisch vs. Physisch
116 22 S. Wrede
117 22 S. Wrede
Jens:
118 21 S. Wrede
** Component hat abstrakt andere Eigenschaften als eine Composite, z.B. Port Referenzen 
119 21 S. Wrede
** Gehört nicht zum Deployment
120 22 S. Wrede
** Service ist nicht existent
121 22 S. Wrede
** Interface: bindings auf Ports oder Port Referenzen
122 21 S. Wrede
123 24 S. Wrede
Was ist mit?
124 26 J. Wienke
* Service = XSRAD.Component (enthält Port-Refs)
125 26 J. Wienke
* Component = Deployment-Unit oder Konzept?
126 26 J. Wienke
* Interface = XSRAD.Interface (In URL enthalten?)
127 16 S. Wrede
128 10 S. Wrede
<pre>
129 10 S. Wrede
scheme://domain:port/path?query_string#fragment_id
130 10 S. Wrede
131 11 S. Wrede
rsb://composite1.composite2:<PortId>/service/interface/port?param_n=n#filter:cond
132 11 S. Wrede
133 16 S. Wrede
rsb://composite1.composite2.componentA.interface.port/service/interface/port
134 10 S. Wrede
135 10 S. Wrede
More complex example (Q: How to deal with input and output ports?)
136 10 S. Wrede
137 12 S. Wrede
rsb://composite1.composite2:<PortId>/interface/port?param_n=n#filter:cond
138 12 S. Wrede
139 10 S. Wrede
Informer:   rsb://biron.hal.camera/image/left/o/left/?param1=12
140 13 S. Wrede
141 13 S. Wrede
Listener A:   rsb+spread://biron.hal.camera/image/left/i
142 13 S. Wrede
Listener B:   rsb+shamem://biron.hal.camera/image/left/i
143 13 S. Wrede
144 10 S. Wrede
Subscription-URI: rsb://biron.hal.vision/grab/out/left/#xpath:/frame
145 10 S. Wrede
</pre>
146 10 S. Wrede
147 10 S. Wrede
h2. Targets
148 10 S. Wrede
149 10 S. Wrede
* Service vs. Interface
150 10 S. Wrede
* Composite
151 10 S. Wrede
* Port
152 10 S. Wrede
153 1 J. Wienke
h2. Use Cases
154 1 J. Wienke
155 1 J. Wienke
* Introspection URIs? HTTP possible?
156 1 J. Wienke
* Subscription on each node of the tree (aggregation vs. filtering)
157 1 J. Wienke
* Model vs. System URI? Should not exist?
158 1 J. Wienke
* Every active object must be identifiable
159 1 J. Wienke
* Data part of URI? Probably not?
160 2 J. Wienke
* RESTful API?
161 5 J. Wienke
162 5 J. Wienke
h2. Identified Problems
163 5 J. Wienke
164 6 J. Wienke
* Data space (motion/wheel/left) is orthogonal to current model structure
165 1 J. Wienke
** Using this concept could generate unmodelled ports in reverse engineering
166 7 J. Wienke
** Is this required if we model our system?
167 7 J. Wienke
** Wildcards in URLs?
168 8 J. Wienke
** Idea: Second model tree for AggregationInterfaces that combine Ports from different Components / Composites etc. and automatically derive their base data type
169 1 J. Wienke
*** Different Protocol part in the URI for these interfaces to subscribe on
170 1 J. Wienke
*** We do not need data hierarchies (only required for function overloading), instead only collections of interfaces are required and an intersection operation to derive the resulting type of an aggregation
171 1 J. Wienke
172 1 J. Wienke
h2. Open Issues
173 1 J. Wienke
174 1 J. Wienke
* Action encoding
175 1 J. Wienke
176 1 J. Wienke
h2. Further Proposals we discussed
177 9 J. Wienke
178 30 S. Wrede
h3. Seb
179 30 S. Wrede
180 30 S. Wrede
<pre>
181 30 S. Wrede
rsb://composite1.composite2.composite3.componentNameXY/interfaceFooBar/portABC // EXPORT, creation of domain objects
182 30 S. Wrede
rsb://composite1/highLevelInterface/portABC  // subscription URI
183 30 S. Wrede
</pre>
184 30 S. Wrede
185 30 S. Wrede
h3. Ingo
186 14 S. Wrede
<pre>
187 14 S. Wrede
rsb://machine.domain.tld:<PortInstanceId>/composite1/composite2/interface/port?param_n=n#filter:cond
188 14 S. Wrede
</pre>
189 14 S. Wrede
_We decided against this as it breaks our aim of location transparency._