C'est quoi une API ?
Et les API chez OVH
Vincent Cassé
Développeur
Pourquoi des API ?
- Données sont affichées dans un navigateur, avec un design
- Pas de structure définie
- Destiné à être...
À quoi servent les API ?
- Avoir une interface simple pour gérer des produits
- Créer des applications pour des usages spé...
Les API : interface entre 2 services
- Socket : transfert brut de données entre deux service → applications liées
- RPC : ...
API REST
- Classement des ressources en arborescence
- Utilisation des verbes HTTP : GET, POST, PUT et DELETE
GET /domain/...
Avantages et inconvénients de REST
- Utilise un protocole accessible partout : HTTP
- Beaucoup de langages possèdent un ma...
À quoi servent les API ?
- Gérer ses produits sans passer par les espaces client
- Supprimer de nombreuses actions manuell...
Les API OVH
api.ovh.com
Produits OVH
api.runabove.com
Labs OVH
api.hubic.com
hubiC API
Authentification script-able Authen...
Les API OVH
api.soyoustart.com
Labs serveurs dédiés
api.kimsufi.com
Serveurs dédiés discount
Deprecated
ovh.com/soapi/fr/
...
Découvrir les API
https://api.ovh.com/console/
https://eu.api.kimsufi.com/console/
https://api.soyoustart.com/console/
htt...
Authentification Script-able
Authentification déportée chez OVH
- Ne partage pas le mot de passe avec l’application tierce...
Authentification Script-able
Granularité des droits
- Droits différents pour chaque “Consumer Key”
- Limitation du périmèt...
Authentification Script-able
Créer des identifiants d'application
https://{ca,eu}.api.ovh.com/createApp/
https://api.runab...
Authentification Script-able
Récupérer une “Consumer Key”
POST https://eu.api.ovh.com/1.0/auth/credential
"accessRules": [...
Login de l'utilisateur
La première requête !
GET https://eu.api.ovh.com/1.0/dedicated/server
[
"ns1337.a.org",
"ns42.a.org"
]
Comment utiliser l'API ?
Avec HTTP
La signature est générée à l'aide des informations de la requête
curl -H 'X-Ovh-Applica...
Comment utiliser l'API ?
Sans réinventer la roue
github.com/ovh
Utilisations basiques à avancées
Manager VPS personnalisé
Comment redémarrer un VPS ?
Manager VPS personnalisé
import ovh
client = ovh.Client()
print client.post('/vps/vps42424242.ovh.net/reboot')
Effectuer des actions de masse
Une faille de sécurité impacte un port sur vos serveurs
Comment appliquer une règle sur les...
Effectuer des actions de masse
def myurlencode (string):
return urllib.quote(string).replace('/', '%2f')
ips = client.get(...
Protéger ses déploiements
Votre configuration Puppet est sur Git et vous déployez automatiquement
Comment créer un snapsho...
Protéger ses déploiements
import ovh
client = ovh.Client()
print client.post('/vps/vps42424242.ovh.net/createSnapshot')
.g...
Gérer les pics de charge
Un site e-commerce peut subir de fortes charges
Comment ajouter des serveurs PHP-FPM + Nginx lors...
Gérer les pics de charge
- Une IP load balancing
- Un serveur web permanent
- Un ou plusieurs /cloud en fonction de charge...
Gérer les pics de charge
Connaître l'état du serveur web permanent
pm.status_path = /status
/etc/php5/fpm/pool.d/www.conf ...
Gérer les pics de charge
curl http://mon_serveur_php/status?json
Connaître l'état du serveur web permanent
{
"accepted con...
Gérer les pics de charge
Démarrer un serveur cloud
flavor = "550757b3-36c2-4027-b6fe-d70f45304b9c"; #VPS-SSD-1 BHS
image =...
Aller plus loin
- https://api.{ ovh | runabove | soyoustart | kimsufi | hubic }.com
- Les consoles
- github.com/ovh
- api-...
[FR] C'est quoi une API ?
Prochain SlideShare
Chargement dans…5
×

[FR] C'est quoi une API ?

2 908 vues

Publié le

Présentation des API (Application Programming Interfaces) et de celles utilisées chez OVH par Vincent Cassé, développeur.

Publié dans : Technologie
1 commentaire
3 j’aime
Statistiques
Remarques
Aucun téléchargement
Vues
Nombre de vues
2 908
Sur SlideShare
0
Issues des intégrations
0
Intégrations
34
Actions
Partages
0
Téléchargements
28
Commentaires
1
J’aime
3
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

[FR] C'est quoi une API ?

  1. 1. C'est quoi une API ? Et les API chez OVH Vincent Cassé Développeur
  2. 2. Pourquoi des API ? - Données sont affichées dans un navigateur, avec un design - Pas de structure définie - Destiné à être compris par des humains - Données structurées en fonction de leur contenu - Rendu brut, sans affichage particulier - Permet l'utilisation automatisé de ces données (donc par des machines) Du site web : Aux API :
  3. 3. À quoi servent les API ? - Avoir une interface simple pour gérer des produits - Créer des applications pour des usages spécifiques - Créer une interaction avec d'autres sites et logiciels - Inventer de nouveaux usages - Protéger les accès aux comptes de ses clients - S'assurer que des programmes / sites externes utilisent leur produits - Permet de fournir un service automatisé (impression et envoi de factures...) Pour les développeurs : Pour le fournisseur :
  4. 4. Les API : interface entre 2 services - Socket : transfert brut de données entre deux service → applications liées - RPC : définition d'une interface en C → applications “lourdes” - SOAP : définition d'une interface sur HTTP et formaté avec XML - REST : définition d'une interface sur HTTP et formaté avec XML ou JSON Petite histoire des interfaces
  5. 5. API REST - Classement des ressources en arborescence - Utilisation des verbes HTTP : GET, POST, PUT et DELETE GET /domain/zone/ GET /domain/zone/{my_zone} GET /domain/zone/{my_zone}/record POST /domain/zone/{my_zone}/record GET /domain/zone/{my_zone}/record/{one_id_record} Exemples :
  6. 6. Avantages et inconvénients de REST - Utilise un protocole accessible partout : HTTP - Beaucoup de langages possèdent un mapping avec HTTP - Simple à comprendre et tester Avantages - Le serveur ne peut pas initier la conversation Inconvénient
  7. 7. À quoi servent les API ? - Gérer ses produits sans passer par les espaces client - Supprimer de nombreuses actions manuelles - Simplifier les déploiements - Améliorer ses processus de tests et d'intégration continue - Configurer rapidement des systèmes complexes ... - Tous les produits pourront se gérer depuis l’API - L'espace client est basé sur ces API By OVH Pour quoi faire ?
  8. 8. Les API OVH api.ovh.com Produits OVH api.runabove.com Labs OVH api.hubic.com hubiC API Authentification script-able Authentification OAuth2
  9. 9. Les API OVH api.soyoustart.com Labs serveurs dédiés api.kimsufi.com Serveurs dédiés discount Deprecated ovh.com/soapi/fr/ Authentification script-able Ancienne API SOAPi
  10. 10. Découvrir les API https://api.ovh.com/console/ https://eu.api.kimsufi.com/console/ https://api.soyoustart.com/console/ https://api.hubic.com/console/ https://api.runabove.com/console/
  11. 11. Authentification Script-able Authentification déportée chez OVH - Ne partage pas le mot de passe avec l’application tierce - Token d'authentification envoyé à l'API à chaque requête : la “Consumer key” - Validation du token par l'utilisateur et uniquement depuis {ovh.com|runabove.com} Droits d’accès Utilisateur Application Consumer key
  12. 12. Authentification Script-able Granularité des droits - Droits différents pour chaque “Consumer Key” - Limitation du périmètre des appels en fonction des URL - Droits décrits avec des regex sur les URL Exemples : GET /me/bill/* GET,POST,DELETE,PUT /dedicated/server/{server_name}/* POST /dedicated/server/*/reboot
  13. 13. Authentification Script-able Créer des identifiants d'application https://{ca,eu}.api.ovh.com/createApp/ https://api.runabove.com/createApp/ https://eu.api.kimsufi.com/createApp/ https://eu.api.soyoustart.com/createApp/
  14. 14. Authentification Script-able Récupérer une “Consumer Key” POST https://eu.api.ovh.com/1.0/auth/credential "accessRules": [ { "method": "GET", "path": "/dedicated/server" } ], "redirection":"https://www.mywebsite.com/" { "validationUrl":"https://eu.api.ovh.com/auth/?credentialToken=iQ1joJExxxxxxOtrPQEeRh", "consumerKey":"one_consumer_key", "state":"pendingValidation" }
  15. 15. Login de l'utilisateur
  16. 16. La première requête ! GET https://eu.api.ovh.com/1.0/dedicated/server [ "ns1337.a.org", "ns42.a.org" ]
  17. 17. Comment utiliser l'API ? Avec HTTP La signature est générée à l'aide des informations de la requête curl -H 'X-Ovh-Application:one_application_key’ -H 'X-Ovh-Timestamp:1369560945’ -H 'X-Ovh-Signature:$1$sign' -H 'X-Ovh-Consumer:one_consumer_key’ https://eu.api.ovh.com/1.0/dedicated/server/ "$1$" + SHA1_HEX(application_secret+"+"+consumer_key+"+"+METHOD+"+"+QUERY+"+"+BODY+"+"+TS TAMP)
  18. 18. Comment utiliser l'API ? Sans réinventer la roue github.com/ovh
  19. 19. Utilisations basiques à avancées
  20. 20. Manager VPS personnalisé Comment redémarrer un VPS ?
  21. 21. Manager VPS personnalisé import ovh client = ovh.Client() print client.post('/vps/vps42424242.ovh.net/reboot')
  22. 22. Effectuer des actions de masse Une faille de sécurité impacte un port sur vos serveurs Comment appliquer une règle sur les IP protégées par le firewall OVH ?
  23. 23. Effectuer des actions de masse def myurlencode (string): return urllib.quote(string).replace('/', '%2f') ips = client.get('/ip') for ip in ips: try: encodedIp = myurlencode(ip) inFirewall = client.get('/ip/' + encodedIP + '/firewall'); for ipInFirewal in inFirewall: content = { 'action': 'deny', 'protocol': 'tcp', 'sequence': 0, 'sourcePort': 80 } url = '/ip/' + encodedIP + '/firewall/' + myurlencode(inIp) + "/rule" client.post(url,content) print inIp , " in ", ip, " : ok" except requests.exceptions.HTTPError, e: print e , " " , ip
  24. 24. Protéger ses déploiements Votre configuration Puppet est sur Git et vous déployez automatiquement Comment créer un snapshot à chaque commit avec l’API OVH et les hooks Git ?
  25. 25. Protéger ses déploiements import ovh client = ovh.Client() print client.post('/vps/vps42424242.ovh.net/createSnapshot') .git/hooks/pre-commit
  26. 26. Gérer les pics de charge Un site e-commerce peut subir de fortes charges Comment ajouter des serveurs PHP-FPM + Nginx lors de ces pics ?
  27. 27. Gérer les pics de charge - Une IP load balancing - Un serveur web permanent - Un ou plusieurs /cloud en fonction de charge Serveur webServeur /cloud Outils nécessaires
  28. 28. Gérer les pics de charge Connaître l'état du serveur web permanent pm.status_path = /status /etc/php5/fpm/pool.d/www.conf : /etc/nginx/sites-available/default : location /status { include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; }
  29. 29. Gérer les pics de charge curl http://mon_serveur_php/status?json Connaître l'état du serveur web permanent { "accepted conn": 1337, "active processes": 1, "idle processes": 2, "listen queue": 0, "listen queue len": 0, "max active processes": 10, "max children reached": 4, "max listen queue": 0, "pool": "www", "process manager": "dynamic", "start since": 3926, "start time": 1393946907, "total processes": 3 }
  30. 30. Gérer les pics de charge Démarrer un serveur cloud flavor = "550757b3-36c2-4027-b6fe-d70f45304b9c"; #VPS-SSD-1 BHS image = "1b042c00-5978-4d75-9a7e-0d7f6ed5be76"; # Ubuntu 15.10 BHS project_cloud = "93c6bxxxxxxxxxxxfeb6"; r = requests.get('http://my_server/status?json') active_processes = json.loads(r.content)['active processes'] if active_processes >= 8: client.post("/cloud/project/" + project_cloud + "/instance", flavorId=flavor, imageId=image, name="php-fpm load peak", region="BHS1", userData="Script to run");     # Wait cloud machine is ready     ipInBackend = client.get('/ip/loadBalancing/ip-192.168.0.0/backend')     if not ('127.0.0.1' in ipInBackend):     content = { 'ipBackend': '127.0.0.1', 'probe': 'http' }         client.post('/ip/loadBalancing/ip-192.168.0.0/backend', content)         
  31. 31. Aller plus loin - https://api.{ ovh | runabove | soyoustart | kimsufi | hubic }.com - Les consoles - github.com/ovh - api-subscribe@ml.ovh.net

×