SuiviDeFlotte.net propose à ses clients une API REST leur permettant d'exploiter les différents services de sa plateforme. Vous pouvez ainsi développer vos propres applications en tirant partie des données remontées par vos périphériques géolocalisés.
Par exemple, il vous est possible de récupérer les trajets bruts effectués par vos véhicules dans le but d'en exploiter les données, ou encore, de coupler vos outils de gestion commerciale avec vos points d'intérêts.
Merci de noter que cette documentation s'adresse à un public technique (développeurs, ingénieurs, etc.). Nous considérons que vous êtes familiarisés avec le protocole HTTP. Les exemples d'utilisation de l'API présents dans cette documentation sont sous forme de lignes de commande cURL.
Pour pouvoir exploiter l'API SuiviDeFlotte.net vous devez au préalable générer une clé d'accès. Seuls les utilisateurs bénéficiant d'un compte
SuiviDeFlotte.net de type "Super Administrateur" peuvent réaliser cette opération (qui n'est nécessaire qu'une seule fois).
Sachez également que deux méthodes d'authentifications sont disponible : Application et Token
persistant.
Choisissez celle qui correspond le mieux au type d'application que vous
envisagez de développer.
Cette méthode est adaptée dans le cadre d'applications (mobile, web ou desktop) exploitées directement par vos utilisateurs détenteurs d'un compte SuiviDeFlotte.net. Ils devront s'identifier avec leur compte utilisateur et bénéficient des mêmes droits et limitations que lorsqu'ils se connectent à nos produits.
L'accès à l'API en mode Application implémente le flux Grant Password (aussi appelé Resource Owner Password Credentials Grant) du protocole OAuth2.
curl -X POST "https://api.suivideflotte.net/oauth2" \ -H "accept: application/json" -H "content-type: application/json" \ -d '{"client_id":"votre_client_id", "client_secret":"votre_client_secret","username":"identifiant_utilisateur_suivideflotte", "password":"mot_de_passe_utilisateur_suivideflotte"}'
Status: 200 OK { "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImZjM2NkMGJmNGY4YjdkZTcxYjNhYWRlNWJlNjU5OTMzMTNhNDU0NzNkNDRiZDcxOTgyOGQyNzFmZWVjMWRlODk0NDgxNTk2YjQyZmNlNWRkIn0.eyJhdWQiOiI2NyIsImp0aSI6ImZjM2NkMGJmNGY4YjdkZTcxYjNhYWRlNWJlNjU5OTMzMTNhNDU0NzNkNDRiZDcxOTgyOGQyNzFmZWVjMWRlODk0NDgxNTk2YjQyZmNlNWRkIiwiaWF0IjoxNDk3Mjc2MDkwLCJuYmYiOjE0OTcyNzYwOTAsImV4cCI6MTQ5NzQ5MjA5MCwic3ViIjoiMTMiLCJzY29wZXMiOlsiKiJdfQ.qOam_2Jf0xFACGBU8yVdkku4DXSyH6dISGY4ZXYtAvKRauQB89BtvtDEK1Mo1PQBoJaX0hvjl2X2Osu3EjwHCy3DwE8NcuFMBdqHbQTAShv23DqOnHRtgKAOz2V_VVs08s-xCxj5yiAQDHankPiDFoHE55GVc6w5E3QgRbHIZuPWDNbqn0lcCbl86xw3J_C7cKGiDiHehxL2cQl2RthPcN3ZevPMWwbAD55DsN0t2RSFpwy3TBl7V5WYRclEECxdZlkkRyu-U_-ec4Vv7o6E8vol_tx-tRBy9yWwfrsUirw-WxCzRrasnU0g0v1ZNsOjeg00UB0dH1HYUFN-GNMygp0nV6UDTOV09P_ligQHLSjf65dKTgV8KF171wuJqDcGbbm0OfvL3sRGU6Nrk8SHd6AHng9hBuxTyQncXnW11gDetbuGUxlbFn_ZCt9DcFgw92MllVqtJqnNAoAaam4rSslXzjivEZ0LR_3MgjkPerzqHeIeCNdWb8cuItnzja0GUBJRAXsiyldAyEY6XV2q0bVWI595lMhfUzsVLwCWtDHlM0ilAMj5Pd-27wrDsc_uvUeIKU_SR-5HkhFdVVGcaDq0dN6Cu7QAfejOZm0aFle9GnrpNjl8R7D9R3oJ3800y8k81hJl1Jzysi-XXnqw6sAtw6P1BwYdmS3gWTQi-qQ", "expires_in":86400, "refresh_token":"S4SD0HDmZfhQk0fCup6ht7FN6QRjtFfHuHZRt7Tzuv\/k7n++O4TbuJPAGTWEgIpJlYq94O7Cw7MBUh+3gedsQUQCIt89JZYejPilkPk+6yoMMoDkCMCYAkKUEcQ4UgbPE222wvFaZHXzytWNo5O5EmuKdPwl0mqotwuKB2g0729h9njwr30lja6DJWFbOFrNiqPLzzWj+DSNv24nbtUPa9NwtBifna3LoNEU1Szv+BbeDZC1Zk4yQv37MMvINNTutlcIfqKvQPJj8PH9jnYKsK64nzEhJb\/RaynidzciQz5OlMl\/Duki72wOBmMsvM8l+k7BaUWSFrgs0pfdt6kPwINieGL9+4FtVxjAPzYxJpfevcfNfxJKLDgRqcIK\/TSMQ+NB4vR+bWWTh3+KL2wjuAsH6PDg5UyuVt3TgZPe8Ig\/sNudTUYjdUprfbzb6xEAviSfZD388lRL+Z1co4zbbV0NHqD4SkMqYHJh6LCGIrC39QKhd6m2qQyxsxMT0grHX27Kn\/dNfl7jNY+cfsDzEa8aQWNWZK6XYBOHDj2RMEPGC+Cl7NuEa7f4eNFFvGLG0CVF\/oeF3\/DncS9Dv2xR4eOUDaTAVZVRQ7iFwaPK3V4biNhRhlZSikiqCIiJnEUmdt9BoCZxWKW3HQ4UZnmj1h8P36HNdIjVncpc7ekcHlk=" }
access_token
Token d'identification à utiliser dans vos appels à l'API (header HTTP
Authorization
).expire_in
Durée de vie de l'access_token en secondes (1440 minutes).refresh_token
Token de rafraichissement (valide 10 jours) à utiliser pour obtenir
un nouvel access_token lorque celui-ci a expiré.
Cette méthode est destiné à une utilisation dans le cadre d'applications serveur gérant des traitements automatisés (machine to machine). Le token fourni a plusieurs particularités qu'il est important de connaître:
Important. Ce type de token est comparable à un mot de passe, vous devez donc prendre les même précautions : ne pas le divulguer, ne pas le stocker en clair dans votre application, etc.
Authorization
afin d'accéder aux endpoints
de l'API. Consultez Autorisations pour plus de détails.
L'API est composée de plusieurs endpoints. Un endpoint est une URL à laquelle vous vous adressez via les méthodes HTTP suivantes :
L'ensemble des endpoints, leurs paramètres et les formats de retour sont consultables via la documentation dédiée au format Swagger.
Chaque requête que vous envoyez à l'API vous gratifie d'une réponse. Cette dernière est composée d'un code de statut HTTP et du contenu de la réponse en elle-même.
Un code de statut HTTP est un code numérique standardisé (consulter la liste des codes HTTP) indiquant comment votre requête a été intéprétée par le serveur.
Le contenu des réponses est formaté en JSON (Content-Type: application/json
).
D'une
manière générale, on peut considérer que les opérations de consultation (GET) retournent une structure qui leur est propre
(vous comprendrez aisément que la consultation d'un Véhicule et d'un Point d'intérêt retournent des
informations structurées différemment). Le détail peut être consulté ici.
Concernant les opérations d'écriture (création via POST, modification via PUT, suppression via DELETE) et les retours d'erreur, Les réponses respectent le format suivant :
{ "code": code_HTTP, "message": Message standard ou précision sur l'erreur recontrée. }
code
Code numérique identique au code de statut HTTP.message
Une chaîne de caractères apportant des précisions sur le retour ou la nature de l'erreur.
Vous trouverez dans cette section les réponses les plus courantes que vous pourriez être ammené à rencontrer en exploitant l'API SuiviDeFlotte.net.
Les codes HTTP 200 indiquent une opération réalisée avec succès.
message
contient
l'identifiant de la ressource fraîchement créée.
Les codes HTTP 400 indiquent que les informations que vous avez transmises ne permettent pas de réaliser l'opération demandée.
message
est structuré de la manière suivante :Status: 422 Unprocessable Entity { "code": 422, "message": { "name" : ["The name field is required."], "email" : ["The email must be a valid email address.", "The email may not be greater than 100 characters."], ... } }Dans cet exemple, le champ
name
n'a pas été spécifié alors qu'il est obligatoire et le champ
email
n'a pas un format valide et dépasse 100 caractères alors qu'il ne devrait pas.
Les codes HTTP 500 indiquent que l'API n'est pas parvenu à réaliser l'opération demandée.
La plupart des opérations de lecture (GET) faisant référence à une ressource (par exemple, récupérer la liste de POI, des véhicules, des alertes, etc.) peuvent être filtrés grâce à des paramètres supplémentaires passés dans l'URL (Query String).
Nous attirons votre attention sur le fait qu'il sagit d'un système de filtrage simple et en aucun cas d'un système complet de requêtage. L'objectif est de vous proposer des outils facile d'utilisation vous permettant d'alléger les réponses de l'API : pourquoi récupérer les 10 champs d'une ressource si vous n'en avez besoin que de 3 dans votre application ?
Query string | Détails |
fields=field1,field2,... |
Limite les champs retournés à ceux spécifiés (SELECT field1, field2). |
equals=field:value,... |
Recherche (de manière stricte) les ressources répondant au(x) critère(s) : WHERE field=value . |
like=field:value,... |
Recherche (de manière souple) les ressources répondant au(x) critère(s) : WHERE field LIKE "%value%" . |
sort=field2,-field2 |
Tri le résultat sur les champs spécifiés. Un nom de champ préfixé par "-" (le signe moins) est trié en DESC et un nom de champ sans
préfixe est trié en ASC : ORDER BY field
ASC|DESC .
|
page=int |
Lorsque la réponse est une liste et qu'elle est paginée, ce paramètre permet de demander une page spécifique. |
perpage=int |
Nombre d'éléments à afficher par page (15 par défaut). |
equals
et like
sont utilisés conjointements, un ET logique est appliqué....?equals=name:jean,name:jacques
). Les filtrages de
type
ET ou OU ne sont pas gérés.
fields
,
equals
,
like
, sort
, page
et
perpage
ne peuvent pas être utilisés comme paramètres que ce soit en GET, en POST ou dans un message JSON dans le corps de
la
requête.
Afin de conserver un temps de réponse optimal et pour éviter les abus, vous êtes limité à 60 appels par minute et par utilisateur. Vous
trouverez
dans les réponses émise par l'API les en-têtes HTTP X-RateLimit-Limit
et X-RateLimit-Remaining
qui vous indiquent
repectivement la limitation par minutes (en l'occurence 60) et le nombre d'appels restants.
Si jamais vous dépassez la limite fixée (X-RateLimit-Remaining = 0
), vous recevez une erreur HTTP 429 "Too Many Attempts"
accompagné d'un en-tête HTTP X-RateLimit-Reset
contenant un timestamp unix indiquant quand vous pourrez à nouveau exploiter
l'API.