1. Nutzung der REST-API
Goobi workflow verfügt über eine sehr umfangreiche REST-API, die für die Anbindung externer Applikationen und Dienste an Goobi workflow eingesetzt werden kann.

Konfiguration der REST-API

Diese Konfiguration der REST-API ist bereits hier detailliert dokumentiert:
7.5 goobi_rest.xml
Goobi workflow (Deutsch)
https://docs.goobi.io/goobi-workflow-de/admin/7/7.5
Für eine einfache Durchführung von Tests ist es unter Umständen hilfreich, die Konfiguration innerhalb der Konfigurationsdatei goobi_rest.xml temporär so zu anzupassen, dass sämtliche Kommandos von dem gewünschten IP-Bereich (z.B. für localhost) mit einem einfachen Passwort (token) aufgerufen werden können. Eine solche Beispielkonfiguration könnte folgendermaßen aussehen:
1
<?xml version='1.0' encoding='UTF-8'?>
2
<config>
3
<!-- allow all commands just locally with the token 'test' -->
4
<endpoint path=".*">
5
<method name="post">
6
<allow netmask="0:0:0:0:0:0:0:1/128" token="test"/>
7
<allow netmask="127.0.0.0/8" token="test"/>
8
</method>
9
<method name="get">
10
<allow netmask="0:0:0:0:0:0:0:1/128" token="test"/>
11
<allow netmask="127.0.0.0/8" token="test"/>
12
</method>
13
<method name="put">
14
<allow netmask="0:0:0:0:0:0:0:1/128" token="test"/>
15
<allow netmask="127.0.0.0/8" token="test"/>
16
</method>
17
</endpoint>
18
</config>
Copied!

Swagger UI als Schnittstellenbeschreibung

Für die REST-API von Goobi workflow gibt es eine automatisierte Dokumentation mittels Swagger UI. Hierbei handelt es sich um eine sehr verbreitete Schnittstellenbeschreibung, die es Entwicklern erlaubt, die REST-API von Goobi workflow interaktiv auszuprobieren und somit eine Anbindung externer Applikationen an Goobi workflow zu implementieren.
Anzeige von Details über die REST-API mittels der Swagger-Oberfläche
Mehr Informationen über die Möglichkeiten, die eine Schnittstellendokumentation via Swagger bietet, lassen sich hier erfahren:
API Documentation & Design Tools for Teams | Swagger
https://swagger.io/
Die Schnittstellenbeschreibung ist innerhalb von Goobi workflow über das Menü Administration zu erreichen und erlaubt von hier das Testen einzelner Kommandos direkt im Webbrowser:
Anzeige von Details über die REST-API mittels der Swagger-Oberfläche
Zur Veranschaulichung des Funktionsumfangs der REST-API von Goobi workflow erfolgt hier ein Einblick in die Schnittstellendokumentation im JSON-Format in stark verkürzter Form. Der volltändige aktuelle Umfang der zur Verfügung stehenden REST-Endpoints hängt wesentlich von der Goobi-Version sowie den installierten REST-Plugins ab und wird von dem hier aufgezeigten Beispiel stark abweichen:
1
{
2
"openapi": "3.0.1",
3
"info": {
4
"title": "Goobi workflow REST API.",
5
"description": "This documentation describes the Goobi workflow REST API.",
6
"contact": {
7
"email": "[email protected]"
8
},
9
"license": {
10
"name": "GPL2 or later",
11
"url": "https://github.com/intranda/goobi-workflow/blob/master/LICENSE"
12
}
13
},
14
"servers": [
15
{
16
"url": "/goobi"
17
}
18
],
19
"security": [
20
{
21
"query": [],
22
"header": []
23
}
24
],
25
"paths": {
26
"/api/ics/info.json": {
27
"get": {
28
"operationId": "getApplicationInfo",
29
"responses": {
30
"default": {
31
"description": "default response",
32
"content": {
33
"application/json": {
34
"schema": {
35
"$ref": "#/components/schemas/ApplicationInfo"
36
}
37
}
38
}
39
}
40
}
41
}
42
},
43
"/api/status": {
44
"get": {
45
"operationId": "getStatus",
46
"responses": {
47
"default": {
48
"description": "default response",
49
"content": {
50
"application/json": {
51
"schema": {
52
"$ref": "#/components/schemas/ResourceStatus"
53
}
54
}
55
}
56
}
57
}
58
}
59
},
60
"/api/footer": {
61
"get": {
62
"operationId": "redirectToCanonicalImageInfo",
63
"responses": {
64
"default": {
65
"description": "default response",
66
"content": {
67
"application/json": {},
68
"application/ld+json": {}
69
}
70
}
71
}
72
}
73
},
74
"/api/footer/{region}/{size}/{rotation}/{quality}.{format}": {
75
"get": {
76
"operationId": "getImage",
77
"parameters": [
78
{
79
"name": "region",
80
"in": "path",
81
"required": true,
82
"schema": {
83
"type": "string"
84
}
85
},
86
{
87
"name": "size",
88
"in": "path",
89
"required": true,
90
"schema": {
91
"type": "string"
92
}
93
},
94
{
95
"name": "rotation",
96
"in": "path",
97
"required": true,
98
"schema": {
99
"type": "string"
100
}
101
},
102
{
103
"name": "quality",
104
"in": "path",
105
"required": true,
106
"schema": {
107
"type": "string"
108
}
109
},
110
{
111
"name": "format",
112
"in": "path",
113
"required": true,
114
"schema": {
115
"type": "string"
116
}
117
}
118
],
119
"responses": {
120
"default": {
121
"description": "default response",
122
"content": {
123
"image/jpg": {},
124
"image/png": {},
125
"image/tif": {}
126
}
127
}
128
}
129
}
130
},
131
"/api/footer/{quality}.{format}": {
132
"get": {
133
"operationId": "redirectToFullImage",
134
"parameters": [
135
{
136
"name": "quality",
137
"in": "path",
138
"required": true,
139
"schema": {
140
"type": "string"
141
}
142
},
143
{
144
"name": "format",
145
"in": "path",
146
"required": true,
147
"schema": {
148
"type": "string"
149
}
150
}
151
],
152
"responses": {
153
"default": {
154
"description": "default response",
155
"content": {
156
"image/jpg": {},
157
"image/png": {},
158
"image/tif": {}
159
}
160
}
161
}
162
}
163
},
164
"/api/footer/status": {
165
"get": {
166
"operationId": "getStatus_1",
167
"responses": {
168
"default": {
169
"description": "default response",
170
"content": {
171
"application/json": {
172
"schema": {
173
"$ref": "#/components/schemas/ResourceStatus"
174
}
175
}
176
}
177
}
178
}
179
}
180
},
181
"/api/image/{directory}/{filename}/info.json": {
182
"get": {
183
"operationId": "getInfoAsJson",
184
"parameters": [
185
{
186
"name": "directory",
187
"in": "path",
188
"required": true,
189
"schema": {
190
"type": "string"
191
}
192
},
193
{
194
"name": "filename",
195
"in": "path",
196
"required": true,
197
"schema": {
198
"type": "string"
199
}
200
}
201
],
202
"responses": {
203
"default": {
204
"description": "default response",
205
"content": {
206
"application/ld+json": {
207
"schema": {
208
"$ref": "#/components/schemas/ImageInformation"
209
}
210
},
211
"application/json": {
212
"schema": {
213
"$ref": "#/components/schemas/ImageInformation"
214
}
215
}
216
}
217
}
218
}
219
}
220
},
221
"/api/image/{directory}/{filename}": {
222
"get": {
223
"operationId": "redirectToCanonicalImageInfo_1",
224
"parameters": [
225
{
226
"name": "directory",
227
"in": "path",
228
"required": true,
229
"schema": {
230
"type": "string"
231
}
232
},
233
{
234
"name": "filename",
235
"in": "path",
236
"required": true,
237
"schema": {
238
"type": "string"
239
}
240
}
241
],
242
"responses": {
243
"default": {
244
"description": "default response",
245
"content": {
246
"application/json": {},
247
"application/ld+json": {}
248
}
249
}
250
}
251
}
252
},
253
"/api/image/{directory}/{filename}/{region}/{size}/{rotation}/{quality}.{format}/{cacheCommand}": {
254
"get": {
255
"operationId": "isInCache",
256
"parameters": [
257
{
258
"name": "directory",
259
"in": "path",
260
"required": true,
261
"schema": {
262
"type": "string"
263
}
264
},
265
{
266
"name": "filename",
267
"in": "path",
268
"required": true,
269
"schema": {
270
"type": "string"
271
}
272
},
273
{
274
"name": "region",
275
"in": "path",
276
"required": true,
277
"schema": {
278
"type": "string"
279
}
280
},
281
{
282
"name": "size",
283
"in": "path",
284
"required": true,
285
"schema": {
286
"type": "string"
287
}
288
},
289
{
290
"name": "rotation",
291
"in": "path",
292
"required": true,
293
"schema": {
294
"type": "string"
295
}
296
},
297
{
298
"name": "quality",
299
"in": "path",
300
"required": true,
301
"schema": {
302
"type": "string"
303
}
304
},
305
{
306
"name": "format",
307
"in": "path",
308
"required": true,
309
"schema": {
310
"type": "string"
311
}
312
},
313
{
314
"name": "cacheCommand",
315
"in": "path",
316
"required": true,
317
"schema": {
318
"type": "string"
319
}
320
}
321
],
322
"responses": {
323
"default": {
324
"description": "default response",
325
"content": {
326
"text/plain": {
327
"schema": {
328
"type": "boolean"
329
}
330
}
331
}
332
}
333
}
334
}
335
},
336
"/api/image/{directory}/{filename}/info.xml": {
337
"get": {
338
"operationId": "getInfoAsXml",
339
"parameters": [
340
{
341
"name": "directory",
342
"in": "path",
343
"required": true,
344
"schema": {
345
"type": "string"
346
}
347
},
348
{
349
"name": "filename",
350
"in": "path",
351
"required": true,
352
"schema": {
353
"type": "string"
354
}
355
}
356
],
357
"responses": {
358
"default": {
359
"description": "default response",
360
"content": {
361
"application/xml": {
362
"schema": {
363
"$ref": "#/components/schemas/ImageInformation"
364
}
365
}
366
}
367
}
368
}
369
}
370
}
371
},
372
"components": {
373
"securitySchemes": {
374
"query": {
375
"type": "apiKey",
376
"name": "token",
377
"in": "query"
378
},
379
"header": {
380
"type": "apiKey",
381
"name": "token",
382
"in": "header"
383
}
384
}
385
}
386
}
Copied!
Last modified 3mo ago