Last couple of days i was thinking of a better way to integrate a WebSocket Server into Lucee.
REST(ful) as Template?
Lucee comes with a integration for Rest services. This integration has 2 limitations we are aware of and we want to address in the future:
- debugging for invalid rest path is very hard
- it is not possible to define a rest server on Server.cfc/Web.cfc level
But ignoring this limitation for a moment, i personally think the Rest integration in Lucee makes it easy to create REST services.
Example for Rest Server Component:
component restpath="/provider" rest="true" {
remote struct function getInfo(required string version restargsource="Path")
httpmethod="GET" restpath="info/{version}" {
return 123;
}
}
Use REST(ful) interface for websockets
Could we use the same interface we have for Rest also for websockets?
question on this, what is similar for a Rest Server and a Websocker server?
In the end it is 2 things:
- the protocol is different
- rest does use the connection for a single request/response and then they get separated again, websocket maintain a connection.
How could an integration look like?
We could do the exact same mapping we have today for rest services.
Then a component endpoint could look like this:
component restpath="/provider" websocket="true" {
public void function open(required struct clientInfo) {
return 123;
}
remote struct function onMessage(required message) returnformat="json|plain|wddx" {
return 123;
}
public void function onError(required struct clientInfo) {
SystemOutput("shit happens!",true);
}
public void function close(required struct clientInfo) {
return 123;
}
}
in addition to rest services structure we could have the functions open,onError,close. The reason to have this is because this component would have a life cycle and not a single request.