Skip to content

Commit b1fcd77

Browse files
authored
Merge pull request #8 from jkyberneees/add-services-json
Add services json
2 parents 2badbff + f04fc2b commit b1fcd77

File tree

7 files changed

+106
-44
lines changed

7 files changed

+106
-44
lines changed

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ service.start(3000)
5555
pathRegex: '/*',
5656
// route prefix
5757
prefix: '/public',
58+
// Optional documentation configuration (unrestricted schema)
59+
docs: {
60+
name: 'Public Service',
61+
endpoint: '/api-docs',
62+
type: 'swagger'
63+
},
5864
// Optional "prefix rewrite" before request is forwarded. Default value: ''
5965
prefixRewrite: '',
6066
// Remote HTTP server URL to forward the request
@@ -104,6 +110,26 @@ const onResponse = async (req, res, stream) => {
104110
}
105111
}
106112
```
113+
## The "*GET /services.json*" endpoint
114+
Since version `1.3.5` the gateway exposes minimal documentation about registered services at: `GET /services.json`
115+
116+
Example output:
117+
```json
118+
[
119+
{
120+
"prefix":"/public",
121+
"docs":{
122+
"name":"Public Service",
123+
"endpoint":"/swagger.json",
124+
"type":"swagger"
125+
}
126+
},
127+
{
128+
"prefix":"/admin"
129+
}
130+
]
131+
```
132+
> NOTE: Please see `docs` configuration entry explained above.
107133
108134
## Gateway level caching
109135
Caching support is provided by the `http-cache-middleware` module. https://www.npmjs.com/package/http-cache-middleware

demos/basic.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ gateway({
99

1010
routes: [{
1111
prefix: '/public',
12-
target: 'http://public.myapp:300'
12+
target: 'http://public.myapp:300',
13+
docs: {
14+
name: 'Public Service',
15+
endpoint: 'swagger.json',
16+
type: 'swagger'
17+
}
1318
}, {
1419
prefix: '/admin',
1520
target: 'http://admin.myapp:3000',

index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ const gateway = (opts) => {
1818
server.use(middleware)
1919
})
2020

21+
// registering services.json
22+
const services = opts.routes.map(route => ({
23+
prefix: route.prefix,
24+
docs: route.docs
25+
}))
26+
server.get('/services.json', (req, res) => {
27+
res.send(services)
28+
})
29+
30+
// processing routes
2131
opts.routes.forEach(route => {
2232
if (undefined === route.prefixRewrite) {
2333
route.prefixRewrite = ''

package-lock.json

Lines changed: 38 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fast-gateway",
3-
"version": "1.3.4",
3+
"version": "1.3.5",
44
"description": "A Node.js API Gateway for the masses!",
55
"main": "index.js",
66
"scripts": {
@@ -28,15 +28,15 @@
2828
"dependencies": {
2929
"fast-proxy": "^1.1.2",
3030
"http-cache-middleware": "^1.2.3",
31-
"restana": "^3.3.0",
31+
"restana": "^3.3.1",
3232
"stream-to-array": "^2.3.0"
3333
},
3434
"devDependencies": {
3535
"chai": "^4.2.0",
3636
"cors": "^2.8.5",
3737
"express-jwt": "^5.3.1",
38-
"helmet": "^3.18.0",
39-
"mocha": "^6.1.4",
38+
"helmet": "^3.20.0",
39+
"mocha": "^6.2.0",
4040
"nyc": "^14.1.1",
4141
"response-time": "^2.3.2",
4242
"standard": "^12.0.1",

test/config.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ module.exports = async () => {
2323
}
2424
}, {
2525
prefix: '/users',
26-
target: 'http://localhost:3000'
26+
target: 'http://localhost:3000',
27+
docs: {
28+
name: 'Users Service',
29+
endpoint: 'swagger.json',
30+
type: 'swagger'
31+
}
2732
}, {
2833
prefix: '/users/proxy-aborted',
2934
target: 'http://localhost:5000',

test/smoke.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,22 @@ describe('API Gateway', () => {
4747
await remote.start(3000)
4848
})
4949

50+
it('services.json contains registered services', async () => {
51+
await request(gateway)
52+
.get('/services.json')
53+
.expect(200)
54+
.then((response) => {
55+
expect(response.body.find(service => service.prefix === '/users')).to.deep.equal({
56+
prefix: '/users',
57+
docs: {
58+
name: 'Users Service',
59+
endpoint: 'swagger.json',
60+
type: 'swagger'
61+
}
62+
})
63+
})
64+
})
65+
5066
it('remote is proxied /users/response-time/204 - 204', async () => {
5167
await request(gateway)
5268
.post('/users/response-time/204')

0 commit comments

Comments
 (0)