Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

Commit 34cf5eb

Browse files
starwarfanlzhai
authored andcommitted
Versioning REST API (#349)
* Versioning REST API * Update doc versions
1 parent acd6cbf commit 34cf5eb

File tree

16 files changed

+236
-116
lines changed

16 files changed

+236
-116
lines changed

doc/Client-Portal Protocol.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Client-Portal Communication Protocol
1+
# Client-Portal Communication Protocol (version 1.1)
22
<!--
33
|date | contributor | revision |
44
| :-------: | :------------: | :------------: |

doc/servermd/RESTAPI.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -542,11 +542,11 @@ Streams model:
542542
}
543543
Resources:
544544

545-
- /v1/rooms/{roomId}/streams
546-
- /v1/rooms/{roomId}/streams/{streamId}
545+
- /v1.1/rooms/{roomId}/streams
546+
- /v1.1/rooms/{roomId}/streams/{streamId}
547547

548548
### List Streams {#RESTAPIsection5_3_1}
549-
**GET ${host}/v1/rooms/{roomId}/streams**
549+
**GET ${host}/v1.1/rooms/{roomId}/streams**
550550

551551
Description:<br>
552552
List streams in the specified room.<br>
@@ -562,7 +562,7 @@ response body:
562562
| json | [ Object(StreamInfo) ] |
563563

564564
### Get Stream {#RESTAPIsection5_3_2}
565-
**GET ${host}/v1/rooms/{roomId}/streams/{streamId}**
565+
**GET ${host}/v1.1/rooms/{roomId}/streams/{streamId}**
566566

567567
Description:<br>
568568
Get a stream's information from the specified room.<br>
@@ -578,7 +578,7 @@ response body:
578578
| json | object(StreamInfo) |
579579

580580
### Update Stream {#RESTAPIsection5_3_3}
581-
**PATCH ${host}/v1/rooms/{roomId}/streams/{streamId}**
581+
**PATCH ${host}/v1.1/rooms/{roomId}/streams/{streamId}**
582582

583583
Description:<br>
584584
Update a stream's given attributes in the specified room.<br>
@@ -637,7 +637,7 @@ response body:
637637

638638

639639
### Drop Stream {#RESTAPIsection5_3_4}
640-
**DELETE ${host}/v1/rooms/{roomId}/streams/{streamId}**
640+
**DELETE ${host}/v1.1/rooms/{roomId}/streams/{streamId}**
641641

642642
Description:<br>
643643
Delete the specified stream from the specified room.<br>
@@ -657,11 +657,11 @@ Streaming-ins model is same as Stream model.
657657

658658
Resources:
659659

660-
- /v1/rooms/{roomId}/streaming-ins
661-
- /v1/rooms/{roomId}/streaming-ins/{streamId}
660+
- /v1.1/rooms/{roomId}/streaming-ins
661+
- /v1.1/rooms/{roomId}/streaming-ins/{streamId}
662662

663663
### Start Streaming-in {#RESTAPIsection5_4_1}
664-
**POST ${host}/v1/rooms/{roomId}/streaming-ins**
664+
**POST ${host}/v1.1/rooms/{roomId}/streaming-ins**
665665

666666
Description:<br>
667667
Add an external RTSP/RTMP stream to the specified room.<br>
@@ -693,7 +693,7 @@ response body:
693693
| json | object(StreamInfo) |
694694

695695
### Stop Streaming-in {#RESTAPIsection5_4_2}
696-
**DELETE ${host}/v1/rooms/{roomId}/streaming-ins/{streamId}**
696+
**DELETE ${host}/v1.1/rooms/{roomId}/streaming-ins/{streamId}**
697697

698698
Description:<br>
699699
Stop the specified external streaming-in in the specified room.<br>

source/agent/conference/conference.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1829,7 +1829,7 @@ var Conference = function (rpcClient, selfRpcId) {
18291829
}, 60);
18301830
});
18311831
}).then(() => {
1832-
callback('callback', streams[stream_id]);
1832+
callback('callback', Stream.toPortalFormat(streams[stream_id]));
18331833
}).catch((e) => {
18341834
callback('callback', 'error', e.message ? e.message : e);
18351835
removeStream(stream_id);
@@ -2012,7 +2012,7 @@ var Conference = function (rpcClient, selfRpcId) {
20122012
).then(() => {
20132013
return Promise.all(muteReq.map((r) => {return setStreamMute(streamId, r.track, r.mute);}));
20142014
}).then(() => {
2015-
callback('callback', streams[streamId]);
2015+
callback('callback', Stream.toPortalFormat(streams[streamId]));
20162016
}, (err) => {
20172017
log.warn('failed in controlStream, reason:', err.message ? err.message : err);
20182018
callback('callback', 'error', err.message ? err.message : err);

source/management_api/api.js

Lines changed: 8 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,8 @@ var bodyParser = require('body-parser');
4848
var app = express();
4949

5050
var serverAuthenticator = require('./auth/serverAuthenticator');
51-
var roomsResource = require('./resource/roomsResource');
52-
var roomResource = require('./resource/roomResource');
53-
var tokensResource = require('./resource/tokensResource');
5451
var servicesResource = require('./resource/servicesResource');
5552
var serviceResource = require('./resource/serviceResource');
56-
var participantsResource = require('./resource/participantsResource');
57-
var streamsResource = require('./resource/streamsResource');
58-
var streamingOutsResource = require('./resource/streamingOutsResource');
59-
var recordingsResource = require('./resource/recordingsResource');
60-
var sipcallsResource = require('./resource/sipcallsResource');
61-
var analyticsResource = require('./resource/analyticsResource');
6253

6354
// parse application/x-www-form-urlencoded
6455
app.use(bodyParser.urlencoded({ extended: true }))
@@ -77,7 +68,7 @@ app.options('*', function(req, res) {
7768
});
7869

7970
// Only following paths need authentication.
80-
var authPaths = ['/rooms*', '/v1/rooms*', '/services*', '/cluster*'];
71+
var authPaths = ['/v1/rooms*', '/v1.1/rooms*', '/services*', '/cluster*'];
8172
app.get(authPaths, serverAuthenticator.authenticate);
8273
app.post(authPaths, serverAuthenticator.authenticate);
8374
app.delete(authPaths, serverAuthenticator.authenticate);
@@ -90,64 +81,13 @@ app.get('/services', servicesResource.represent);
9081
app.get('/services/:service', serviceResource.represent);
9182
app.delete('/services/:service', serviceResource.deleteService);
9283

93-
////////////////////////////////////////////////////////////////////////////////////////////
94-
// v1 interface begin
95-
// /////////////////////////////////////////////////////////////////////////////////////////
96-
97-
//Room management
98-
app.post('/v1/rooms', roomsResource.createRoom); //FIXME: The definition of 'options' needs to be refined.
99-
app.get('/v1/rooms', roomsResource.represent); //FIXME: The list result needs to be simplified.
100-
app.get('/v1/rooms/:room', roomResource.represent); //FIXME: The detailed format of a complete room configuration data object needs to be refined.
101-
app.delete('/v1/rooms/:room', roomResource.deleteRoom);
102-
app.put('/v1/rooms/:room', roomResource.updateRoom);
103-
app.patch('/v1/rooms/:room', (req, res, next) => next(new e.AppError('Not implemented'))); //FIXME: To be implemented.
104-
105-
//Room checker for all the sub-resources
106-
app.use('/v1/rooms/:room/*', roomResource.validate);
107-
108-
//Participant management
109-
app.get('/v1/rooms/:room/participants', participantsResource.getList);
110-
app.get('/v1/rooms/:room/participants/:participant', participantsResource.get);
111-
app.patch('/v1/rooms/:room/participants/:participant', participantsResource.patch);
112-
app.delete('/v1/rooms/:room/participants/:participant', participantsResource.delete);
113-
114-
//Stream(including external streaming-in) management
115-
app.get('/v1/rooms/:room/streams', streamsResource.getList);
116-
app.get('/v1/rooms/:room/streams/:stream', streamsResource.get);
117-
app.patch('/v1/rooms/:room/streams/:stream', streamsResource.patch);
118-
app.delete('/v1/rooms/:room/streams/:stream', streamsResource.delete);
119-
app.post('/v1/rooms/:room/streaming-ins', streamsResource.addStreamingIn);//FIXME: Validation on body.type === 'streaming' is needed.
120-
app.delete('/v1/rooms/:room/streaming-ins/:stream', streamsResource.delete);
121-
122-
//External streaming-out management
123-
app.get('/v1/rooms/:room/streaming-outs', streamingOutsResource.getList);
124-
app.post('/v1/rooms/:room/streaming-outs', streamingOutsResource.add);//FIXME: Validation on body.type === 'streaming' is needed.
125-
app.patch('/v1/rooms/:room/streaming-outs/:id', streamingOutsResource.patch);
126-
app.delete('/v1/rooms/:room/streaming-outs/:id', streamingOutsResource.delete);
127-
128-
//Server side recording management
129-
app.get('/v1/rooms/:room/recordings', recordingsResource.getList);
130-
app.post('/v1/rooms/:room/recordings', recordingsResource.add);//FIXME: Validation on body.type === 'recording' is needed.
131-
app.patch('/v1/rooms/:room/recordings/:id', recordingsResource.patch);
132-
app.delete('/v1/rooms/:room/recordings/:id', recordingsResource.delete);
133-
134-
//Sip call management
135-
app.get('/v1/rooms/:room/sipcalls', sipcallsResource.getList);
136-
app.post('/v1/rooms/:room/sipcalls', sipcallsResource.add);
137-
app.patch('/v1/rooms/:room/sipcalls/:id', sipcallsResource.patch);
138-
app.delete('/v1/rooms/:room/sipcalls/:id', sipcallsResource.delete);
139-
140-
//Analytic management
141-
app.get('/v1/rooms/:room/analytics', analyticsResource.getList);
142-
app.post('/v1/rooms/:room/analytics', analyticsResource.add);
143-
app.delete('/v1/rooms/:room/analytics/:id', analyticsResource.delete);
144-
145-
//Create token.
146-
app.post('/v1/rooms/:room/tokens', tokensResource.create);
147-
148-
////////////////////////////////////////////////////////////////////////////////////////////
149-
// v1 interface end
150-
// /////////////////////////////////////////////////////////////////////////////////////////
84+
// API for version 1.0.
85+
var routerV1 = require('./resource/v1');
86+
app.use('/v1', routerV1);
87+
88+
// API for version 1.1.
89+
var routerV1_1 = require('./resource/v1.1');
90+
app.use('/v1.1', routerV1_1);
15191

15292
// for path not match
15393
app.use('*', function(req, res, next) {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright (C) <2019> Intel Corporation
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
/*
5+
* Router for v1.1 interfaces
6+
*/
7+
'use strict';
8+
var express = require('express')
9+
var router = express.Router()
10+
var streamsResource = require('./streamsResource');
11+
12+
//Stream(including external streaming-in) management
13+
router.get('/rooms/:room/streams', streamsResource.getList);
14+
router.get('/rooms/:room/streams/:stream', streamsResource.get);
15+
router.patch('/rooms/:room/streams/:stream', streamsResource.patch);
16+
router.delete('/rooms/:room/streams/:stream', streamsResource.delete);
17+
router.post('/rooms/:room/streaming-ins', streamsResource.addStreamingIn);//FIXME: Validation on body.type === 'streaming' is needed.
18+
router.delete('/rooms/:room/streaming-ins/:stream', streamsResource.delete);
19+
20+
module.exports = router

source/management_api/resource/streamsResource.js renamed to source/management_api/resource/v1.1/streamsResource.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
// SPDX-License-Identifier: Apache-2.0
44

55
'use strict';
6-
var dataAccess = require('../data_access');
7-
var requestHandler = require('../requestHandler');
8-
var e = require('../errors');
6+
var dataAccess = require('../../data_access');
7+
var requestHandler = require('../../requestHandler');
8+
var e = require('../../errors');
99

10-
var logger = require('./../logger').logger;
10+
var logger = require('../../logger').logger;
1111

1212
// Logger
1313
var log = logger.getLogger('StreamsResource');

source/management_api/resource/analyticsResource.js renamed to source/management_api/resource/v1/analyticsResource.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
// SPDX-License-Identifier: Apache-2.0
44

55
'use strict';
6-
var requestHandler = require('../requestHandler');
7-
var e = require('../errors');
6+
var requestHandler = require('../../requestHandler');
7+
var e = require('../../errors');
88

9-
var logger = require('./../logger').logger;
9+
var logger = require('./../../logger').logger;
1010

1111
// Logger
1212
var log = logger.getLogger('AnalyticsResource');
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Copyright (C) <2019> Intel Corporation
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
/*
5+
* Router for v1 interfaces
6+
*/
7+
'use strict';
8+
var express = require('express')
9+
var router = express.Router()
10+
11+
var roomsResource = require('./roomsResource');
12+
var roomResource = require('./roomResource');
13+
var tokensResource = require('./tokensResource');
14+
var participantsResource = require('./participantsResource');
15+
var streamsResource = require('./streamsResource');
16+
var streamingOutsResource = require('./streamingOutsResource');
17+
var recordingsResource = require('./recordingsResource');
18+
var sipcallsResource = require('./sipcallsResource');
19+
var analyticsResource = require('./analyticsResource');
20+
21+
//Room management
22+
router.post('/rooms', roomsResource.createRoom); //FIXME: The definition of 'options' needs to be refined.
23+
router.get('/rooms', roomsResource.represent); //FIXME: The list result needs to be simplified.
24+
router.get('/rooms/:room', roomResource.represent); //FIXME: The detailed format of a complete room configuration data object needs to be refined.
25+
router.delete('/rooms/:room', roomResource.deleteRoom);
26+
router.put('/rooms/:room', roomResource.updateRoom);
27+
router.patch('/rooms/:room', (req, res, next) => next(new e.routerError('Not implemented'))); //FIXME: To be implemented.
28+
29+
//Room checker for all the sub-resources
30+
router.use('/rooms/:room/*', roomResource.validate);
31+
32+
//Participant management
33+
router.get('/rooms/:room/participants', participantsResource.getList);
34+
router.get('/rooms/:room/participants/:participant', participantsResource.get);
35+
router.patch('/rooms/:room/participants/:participant', participantsResource.patch);
36+
router.delete('/rooms/:room/participants/:participant', participantsResource.delete);
37+
38+
//Stream(including external streaming-in) management
39+
router.get('/rooms/:room/streams', streamsResource.getList);
40+
router.get('/rooms/:room/streams/:stream', streamsResource.get);
41+
router.patch('/rooms/:room/streams/:stream', streamsResource.patch);
42+
router.delete('/rooms/:room/streams/:stream', streamsResource.delete);
43+
router.post('/rooms/:room/streaming-ins', streamsResource.addStreamingIn);//FIXME: Validation on body.type === 'streaming' is needed.
44+
router.delete('/rooms/:room/streaming-ins/:stream', streamsResource.delete);
45+
46+
//External streaming-out management
47+
router.get('/rooms/:room/streaming-outs', streamingOutsResource.getList);
48+
router.post('/rooms/:room/streaming-outs', streamingOutsResource.add);//FIXME: Validation on body.type === 'streaming' is needed.
49+
router.patch('/rooms/:room/streaming-outs/:id', streamingOutsResource.patch);
50+
router.delete('/rooms/:room/streaming-outs/:id', streamingOutsResource.delete);
51+
52+
//Server side recording management
53+
router.get('/rooms/:room/recordings', recordingsResource.getList);
54+
router.post('/rooms/:room/recordings', recordingsResource.add);//FIXME: Validation on body.type === 'recording' is needed.
55+
router.patch('/rooms/:room/recordings/:id', recordingsResource.patch);
56+
router.delete('/rooms/:room/recordings/:id', recordingsResource.delete);
57+
58+
//Sip call management
59+
router.get('/rooms/:room/sipcalls', sipcallsResource.getList);
60+
router.post('/rooms/:room/sipcalls', sipcallsResource.add);
61+
router.patch('/rooms/:room/sipcalls/:id', sipcallsResource.patch);
62+
router.delete('/rooms/:room/sipcalls/:id', sipcallsResource.delete);
63+
64+
//Analytic management
65+
router.get('/rooms/:room/analytics', analyticsResource.getList);
66+
router.post('/rooms/:room/analytics', analyticsResource.add);
67+
router.delete('/rooms/:room/analytics/:id', analyticsResource.delete);
68+
69+
//Create token.
70+
router.post('/rooms/:room/tokens', tokensResource.create);
71+
72+
module.exports = router

source/management_api/resource/participantsResource.js renamed to source/management_api/resource/v1/participantsResource.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
// SPDX-License-Identifier: Apache-2.0
44

55
'use strict';
6-
var dataAccess = require('../data_access');
7-
var requestHandler = require('../requestHandler');
8-
var e = require('../errors');
6+
var dataAccess = require('../../data_access');
7+
var requestHandler = require('../../requestHandler');
8+
var e = require('../../errors');
99

10-
var logger = require('./../logger').logger;
10+
var logger = require('./../../logger').logger;
1111

1212
// Logger
1313
var log = logger.getLogger('ParticipantsResource');

source/management_api/resource/recordingsResource.js renamed to source/management_api/resource/v1/recordingsResource.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
// SPDX-License-Identifier: Apache-2.0
44

55
'use strict';
6-
var dataAccess = require('../data_access');
7-
var requestHandler = require('../requestHandler');
8-
var e = require('../errors');
6+
var dataAccess = require('../../data_access');
7+
var requestHandler = require('../../requestHandler');
8+
var e = require('../../errors');
99

10-
var logger = require('./../logger').logger;
10+
var logger = require('./../../logger').logger;
1111

1212
// Logger
1313
var log = logger.getLogger('RecordingsResource');

0 commit comments

Comments
 (0)