Rent
Il servizio "Rent" è un componente fondamentale dell'ecosistema ACMESky. Contrariamente alle aspettative, questo servizio non è un sistema di noleggio di veicoli, bensì fa riferimento a un servizio di taxi o car sharing simile a piattaforme famose come Uber o Bolt.
ACMESky utilizza il servizio "Rent" per garantire un'esperienza completa ai suoi utenti durante il processo di prenotazione dei viaggi. In particolare, il servizio viene attivato quando il costo di un viaggio supera la soglia dei 1000€. In queste circostanze, ACMESky prenota automaticamente un trasferimento per l'utente dalla propria residenza all'aeroporto di partenza del viaggio.
Set up
Rent è un'API SOAP scritta in Jolie. Per avviare
il server bisogna prima generare un servizio per un dato namespace
.
jolie2wsdl --namespace <namespace> --portName RentPort --portAddr <portaddr> --outputFile <file.wsdl> server.ol
Ad esempio, per un possibile uber.acmesky.cs.unibo.it
simile al noto servizio
Uber che gira nella porta locale 8080
potremmo avere:
jolie2wsdl --namespace uber.acmesky.cs.unibo.it --portName RentPort --portAddr http://localhost:8080 --outputFile uber-acmesky.wsdl server.ol
Successivamente basterà creare un file di configurazione config.json
specificando:
{
"location": "socket://localhost:8080",
"proto": {
"$": "soap",
"wsdl": "/etc/data/uber-acmesky.wsdl"
},
"database": {
"username": "username",
"password": "password",
"host": "localhost",
"name": "rent"
}
}
Dal file di configurazione di Docker compose si vede come la cartella corrente
venga mappata automaticamente nel volume in /etc/data
. Dunque, il WSDL in
produzioneu sarà /etc/data/uber-acmesky.wsdl
.
Bisogna inoltre mettere up un servizio di webserver per esporre il WSDL online così da poter essere richiamato dal Worker di ACMESky.
La build può proseguire con:
- Build del servizio di Rent.
$ docker build -t acmesky-rentservice .
- File WSDL in cartella statica.
$ mkdir www
$ copy uber-acmesky.wsdl www
- Creazione di config per il webserver Leonardo.
# config-leonardo.json
{
"location": "<location>",
"documentDir": "/etc/data/www/"
}
- Build del servizio Leonardo.
$ docker build -t acmesky-rentleonardo -f Dockerfile-leonardo .
Infine grazie a Docker compose si possono mettere entrambi i servizi up.
$ docker compose up
API
BookRent
Chiamata impiegata per la creazione di una nuova prenotazione di transfer.
- La richiesta è del tipo
RentRequest
.
type RentRequest: void {
.PickupAddress[1,1]: string
.Address[1,1]: string
.CustomerName[1,1]: string
.PickupDate[1,1]: string
}
- La risposta è del tipo
RentResponse
.
type RentResponse: void {
.Status[1,1]: string
.RentId[0,1]: string
.Error[0,1]: string
}
Un test può essere fatto dal seguente payload:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rent="uber.acmesky.cs.unibo.it.xsd">
<soapenv:Header/>
<soapenv:Body>
<rent:BookRent>
<CustomerName>Mario</CustomerName>
<PickupAddress>Via Zamboni 33, Bologna</PickupAddress>
<Address>Mura Anteo Zamboni 7, Bologna</Address>
<PickupDate>02/01/2006 15:04</PickupDate>
</rent:BookRent>
</soapenv:Body>
</soapenv:Envelope>
GetRentById
Chiamata impiegata per la mostra di dati di una prenotazione dato un ID.
- La richiesta è del tipo
GetRentRequest
.
type GetRentRequest: void {
.RentId[1,1]: string
}
- La risposta è del tipo
GetRentResponse
.
type GetRentResponse: void {
.Status[1,1]: string
.RentId[1,1]: string
.PickupAddress[1,1]: string
.Address[1,1]: string
.Error[0,1]: string
.CustomerName[1,1]: string
.PickupDate[1,1]: string
}
Un test può essere fatto dal seguente payload:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rent="uber.acmesky.cs.unibo.it.xsd">
<soapenv:Header/>
<soapenv:Body>
<rent:GetRentById>
<RentId>d7c04dca-29d7-490f-851c-1da794e301b9</RentId>
</rent:GetRentById>
</soapenv:Body>
</soapenv:Envelope>
Codice sorgente
Il server è presente alla seguente repository Github.