URI Schema » History » Version 36

J. Wienke, 04/13/2011 11:30 AM

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