Skip to content

Commit fa9e9b7

Browse files
authored
Merge pull request #60 from OpenAF/codex/add-http-browser-api-job
Document HTTP Browser API and remove unused `options` arg
2 parents b430185 + 41d9261 commit fa9e9b7

3 files changed

Lines changed: 82 additions & 3 deletions

File tree

.package.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,9 @@ files:
7171
- oJobs.yaml
7272
filesHash:
7373
LICENSE: 92170cdc034b2ff819323ff670d3b7266c8bffcd
74-
README.md: 37d4f8c68b50da5c8e10d123045690d89379a432
74+
README.md: fc1de27ad943a8563e974a3edf9c1a5aec60ec6d
7575
oJobBasics.yaml: a084f112233ea3faa11eb9bcc16871c721d05f5b
76-
oJobBrowse.yaml: 75eb7f2ba1e6dc8cb51fb40ef9318f5a1f7280d5
76+
oJobBrowse.yaml: ccb66c97c3ff64c894ae7710ddac73b862d9db5d
7777
oJobCh.yaml: 4290a3d5dc035a6d7b6659aeb0e370d0bb55be58
7878
oJobDebug.yaml: bfb5debec954e3b524ae4ce103d6ea8e780448e9
7979
oJobDirector.yaml: ec87282023bd8ed30170d330e17ddf6fbb1e3618

README.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,6 +1094,21 @@ Pagination:
10941094
- `renderList` will render pager controls when the list metadata includes `pageInfo` with `page`, `pageSize`, and `total`.
10951095
- If `pageInfo` is not present, it falls back to query parameters `page` and `pageSize`.
10961096

1097+
### HTTP Browser API
1098+
1099+
HTTP API to access `getList`/`getObj` for any `HTTP Browse generic` instance.
1100+
1101+
| Argument | Type | Mandatory | Description |
1102+
|----------|------|-----------|-------------|
1103+
| port | Number | No | The port where the server was made available (defaults to 8091) |
1104+
| uri | String | No | The URI where the HTTP Browser API will be available (defaults to "/api/browse") |
1105+
| browseUri | String | No | The HTTP Browse generic URI to target (can be overridden by request param `browseUri`) |
1106+
1107+
Query parameters:
1108+
- `action`: `list` (default) or `obj`.
1109+
- `path`: Optional relative path appended to the target browse URI.
1110+
- `raw`: When `true`, streams the object response if possible.
1111+
10971112
### HTTP Browser
10981113

10991114
HTTP browser service based on existing types (e.g., ow.server.httpd.browse.files).

oJobBrowse.yaml

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ jobs:
181181
if (isDef(lst.pageInfo.pageSize)) _pageSize = Number(lst.pageInfo.pageSize)
182182
} else {
183183
if (isDef(request.params.page)) _page = Number(request.params.page)
184-
if (isDef(request.params.pageSize)) _pageSize = Number(request.params.pageSize)
184+
//if (isDef(request.params.pageSize)) _pageSize = Number(request.params.pageSize)
185185
}
186186
if (!isNumber(_page) || _page <= 0) _page = 1
187187
if (!isNumber(_pageSize) || _pageSize < 0) _pageSize = 0
@@ -423,3 +423,67 @@ jobs:
423423
_options.parentPath = args.path
424424
_options.port = args.port
425425
global.__GBHTTPD[String(args.port) + args.uri] = _options
426+
427+
# --------------------------
428+
- name : HTTP Browser API
429+
deps :
430+
- HTTP Start Server
431+
to : HTTP Service
432+
typeArgs:
433+
noLog: false
434+
shortcut:
435+
name : httpdBrowserAPI
436+
keyArg: port
437+
args :
438+
uri : uri
439+
browseUri: browseUri
440+
help :
441+
text : Provides a HTTP API to access getList/getObj for any HTTP Browse generic implementation.
442+
expects:
443+
- name: port
444+
desc: (Number) The port where the server was made available (default is 8091)
445+
- name: uri
446+
desc: (String) The URI where the HTTP Browser API will be available.
447+
- name: browseUri
448+
desc: (String) The HTTP Browse generic URI to target (can be overridden by request param browseUri)
449+
check:
450+
in:
451+
port : toNumber.isNumber.default(8091)
452+
uri : isString.default("/api/browse")
453+
browseUri: isString.default(__)
454+
args :
455+
execURI: | #js
456+
try {
457+
var targetUri = args.browseUri
458+
if (isUnDef(targetUri) || targetUri === "") targetUri = request.params.browseUri
459+
if (isUnDef(targetUri) || targetUri === "") targetUri = request.params.uri
460+
if (isUnDef(targetUri) || targetUri === "") {
461+
return { data: "Missing browseUri", mimetype: "text/plain", status: 400, header: {} }
462+
}
463+
464+
var _options = global.__GBHTTPD[String(port) + targetUri]
465+
if (isUnDef(_options)) {
466+
return { data: "Unknown browseUri", mimetype: "text/plain", status: 404, header: {} }
467+
}
468+
469+
var targetPath = _$(request.params.path).isString().default("")
470+
var _req = merge({}, request)
471+
_req.uri = targetUri + (targetPath.length > 0 ? "/" + targetPath.replace(/^\/+/, "") : "")
472+
473+
var action = _$(request.params.action).isString().default("list")
474+
if (action == "obj") {
475+
var _obj = _options._fns.getObj(_req, _options)
476+
if (request.params.raw == "true") {
477+
if (isDef(_obj.stream)) return server.replyStream(_obj.stream, ow.server.httpd.getMimeType(targetPath))
478+
if (isDef(_obj.file)) return server.replyStream(io.readFileStream(_obj.file), ow.server.httpd.getMimeType(targetPath))
479+
if (isDef(_obj.data)) return server.replyOK(_obj.data, ow.server.httpd.getMimeType(targetPath))
480+
}
481+
return ow.server.httpd.replyJSMap(server, _obj)
482+
}
483+
484+
var _lst = _options._fns.getList(_req, _options)
485+
return ow.server.httpd.replyJSMap(server, _lst)
486+
} catch(e) {
487+
logErr(`Error: ${e.message}`)
488+
return { data: "Internal error", mimetype: "text/plain", status: 500, header: {} }
489+
}

0 commit comments

Comments
 (0)