URI Schema » History » Version 41

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

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