-
Notifications
You must be signed in to change notification settings - Fork 0
[API] Dossier technique (fr)
Il a été décidé de centraliser les interactions entre les différents éléments du projet sur une API. Cela permet une distribution des fonctionnalités selon les URLs que les clients de l'API utilisent.
Il s’agit d’une API HTTP standard, mais également d’une API Websocket, qui permet à l’application Web de recevoir des informations du serveur en temps réel.
- Framework : Ruby on Rails 5
- Base de données : MySQL
- Formats de retours des URLs : JSON
- Architecture : MVC
L'implémentation des Websockets dans Ruby en Rails requiert un système de Queue. Il permet de différer de manière asynchrone les appels entre clients et serveur Webscoket.
Redis est une solution technique éprouvée, qui se met en place sans difficulté.
Pour rappel, le déclenchement d'un Reminder peut être fait selon 2 modes. A la création, si
- l'attribut
displayed_at
est renseigné, le Reminder sera affiché à cette date - l'attribut
displayed_at
n'est pas renseigné, le Reminder sera affiché immédiatement
Le premier mode requiert un système de déclenchement à un instant donné (displayed_at
en l'occurence). Ce système est assuré par le logiciel Sidekiq. Basé sur Redis, il offre une interface de programmation pour permettre le mode de déclenchement.
L'application Web affiche la météo. Elle est mise à jour toutes les 20 minutes grâce à un CRON système. Ces mises à jour sont communiquées à l'application Web en Websocket, ce qui évite le rechargement de la page.
C'est l'API OpenWeatherMap qui permet de récupérer les informations météorologiques. L'API y accède grâce à la gem open-weather. Elle offre une couche d'abstraction pour consulter facilement l'API.
L'API peut suivre de personnes sur Twitter. Lorsqu'une personne suivie tweet, l'API Twitter prévient l'API DOT. Cette dernière est donc en mesure de communiquer le contenu du tweet à l'application Web, en Websocket.
C'est un daemon Ruby qui gère cette reception du tweet et son envoi sur l'application Web.
La documentation des ressources se trouve également sur l'URL /apipie
de l'API.
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
index | GET | /raspberries | Récupère tous les Raspberry Pi | |
show | GET | /raspberries/:id | Récupère un Raspberry Pi | |
create | POST | /raspberries | Crée un Raspberry Pi | |
update | PUT/PATCH | /raspberries/:id | Modifie un Raspberry Pi | |
destroy | DELETE | /raspberries/:id | Supprime un Raspberry Pi |
Format de retour :
{
"data": {
"id": "1",
"type": "raspberries",
"attributes": {
"api-port": 8080,
"created-at": "2016-06-06T21:42:53.000+02:00",
"domain-name": '42.fr',
"ip-address": "42.42.42.42",
"mac-address": "42:42:51:7D:1C:02",
"master-device": false,
"name": "Raspberry 1"
}
}
}
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
index | GET | /reminders | Utilisateur approuvé ou admin | Récupère les 10 derniers Reminders |
show | GET | /reminders/:id | Utilisateur approuvé ou admin | Récupère un Reminder |
create | POST | /reminders | Utilisateur approuvé ou admin | Crée un Reminder |
destroy | DELETE | /reminders/:id | Utilisateur approuvé ou admin | Supprime un Reminder |
erase_all | DELETE | /reminders/erase_all | Utilisateur approuvé ou admin | Efface les Reminders affichés sur l'écran interne |
Format de retour :
{
"data": {
"id": "9",
"type": "reminders",
"attributes": {
"content": "Reminder content",
"created-at": "2016-05-28T15:58:06.000Z",
"displayed-at": "2016-05-29T00:00:00.000Z",
"duration": 10,
"priority": 1,
"title": "Reminder for test",
"type": "alert",
"user": "Pierre Flauder",
"displayed": false,
"displayed-ago": "environ 9 heures"
}
}
}
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
path | GET | /screens/path/from/:from/to/:to | Affiche le chemin entre 2 villes |
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
show | GET | /settings/:id | Récupère l'objet Setting | |
update | PUT/PATCH | /settings/:id | Utilisateur approuvé ou admin | Modifie l'objet Setting |
Format de retour :
{
"data": {
"id": "1",
"type": "settings",
"attributes": {
"reminders-enabled": false,
"room-occupied": false,
"sarah-enabled": false,
"screen-guest-enabled": false,
"twitter-enabled": false
}
}
}
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
create | POST | /users | Crée un User |
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
create | POST | /users/sign_in | Connecte un User |
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
ping | GET | /tests/ping | Utilisateur approuvé ou admin | Récupère le statut de l'API |
voice | POST | /tests/voice | Utilisateur approuvé ou admin | Envoi du texte que SARAH répète |
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
index | GET | /users | Utilisateur approuvé ou admin | Récupère tous les Users |
show | GET | /users/:id | Utilisateur approuvé ou admin | Récupère un User |
update | PUT/PATCH | /users/:id | Utilisateur approuvé ou admin | Modifie un User |
destroy | DELETE | /users/:id | Utilisateur admin | Supprime un User |
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
index | GET | /voice_commands | Récupère toutes les commandes vocales disponibles pour SARAH |
Méthode | Verbe HTTP | URL | Description |
---|---|---|---|
show | GET | /voice_recognition_servers/:id | Récupère l'objet du serveur de reconnaissance vocale |
update | PUT/PATCH | /voice_recognition_servers/:id | Modifie l'objet du serveur de reconnaissance vocale |
Format de retour :
{
"data": {
"id": "1",
"type": "voice_recognition_servers",
"attributes": {
"api_port": nil,
"domain_name": nil,
"ip_address": nil,
"mac_address": nil
}
}
}
Méthode | Verbe HTTP | URL | Accès | Description |
---|---|---|---|---|
show | GET | /weather | Récupère les informations météorologiques de la ville de Paris |
Format de retour :
{
data: {
"weather": "sunshine",
"temp": {
"current": "22",
"min": "12",
"max": "23"
}
}
}