SlideShare une entreprise Scribd logo
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 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 :
À 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 :
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
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 :
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
À 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 ?
Les API OVH
api.ovh.com
Produits OVH
api.runabove.com
Labs OVH
api.hubic.com
hubiC API
Authentification script-able Authentification OAuth2
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
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/
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
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
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/
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"
}
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-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)
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 IP protégées par le firewall OVH ?
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
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 ?
Protéger ses déploiements
import ovh
client = ovh.Client()
print client.post('/vps/vps42424242.ovh.net/createSnapshot')
.git/hooks/pre-commit
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 ?
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
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;
}
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
}
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)
        
Aller plus loin
- https://api.{ ovh | runabove | soyoustart | kimsufi | hubic }.com
- Les consoles
- github.com/ovh
- api-subscribe@ml.ovh.net

Contenu connexe

Tendances

Alphorm.com Formation pfSense: Le firewall open source de référence
Alphorm.com Formation pfSense: Le firewall open source de référenceAlphorm.com Formation pfSense: Le firewall open source de référence
Alphorm.com Formation pfSense: Le firewall open source de référence
Alphorm
 
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
safwenbenfredj
 

Tendances (20)

Technologies sur angular.pptx
Technologies sur angular.pptxTechnologies sur angular.pptx
Technologies sur angular.pptx
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Introduction à React JS
Introduction à React JSIntroduction à React JS
Introduction à React JS
 
Alphorm.com Formation pfSense: Le firewall open source de référence
Alphorm.com Formation pfSense: Le firewall open source de référenceAlphorm.com Formation pfSense: Le firewall open source de référence
Alphorm.com Formation pfSense: Le firewall open source de référence
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
TFE - Sécurité des architectures en conteneurs Docker orchestrés par Kubernetes
TFE -  Sécurité des architectures en conteneurs Docker orchestrés par KubernetesTFE -  Sécurité des architectures en conteneurs Docker orchestrés par Kubernetes
TFE - Sécurité des architectures en conteneurs Docker orchestrés par Kubernetes
 
Rapport du Projet de Fin d'année Génie informatique
Rapport du Projet de Fin d'année Génie informatique Rapport du Projet de Fin d'année Génie informatique
Rapport du Projet de Fin d'année Génie informatique
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
Docker
DockerDocker
Docker
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
Rapport de projet_de_fin_d__tudes__pfe__safwen (8)
 
Gitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement ContinueGitlab CI : Integration et Déploiement Continue
Gitlab CI : Integration et Déploiement Continue
 
Concevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring BootConcevoir, développer et sécuriser des micro-services avec Spring Boot
Concevoir, développer et sécuriser des micro-services avec Spring Boot
 

En vedette

Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet Troubleshooting
Puppet
 

En vedette (20)

[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH Télécom[FR] Les connexions SDSL chez OVH Télécom
[FR] Les connexions SDSL chez OVH Télécom
 
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRackWebinar - Minimise your security risk with Hybrid Cloud and OVH vRack
Webinar - Minimise your security risk with Hybrid Cloud and OVH vRack
 
Advanced Web Hosting
Advanced Web HostingAdvanced Web Hosting
Advanced Web Hosting
 
[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême[FR] Les requêtes HTTP de l'extrême
[FR] Les requêtes HTTP de l'extrême
 
Introduction to OverTheBox
Introduction to OverTheBoxIntroduction to OverTheBox
Introduction to OverTheBox
 
[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébé[FR] Timeseries appliqué aux couches de bébé
[FR] Timeseries appliqué aux couches de bébé
 
HTTPS: All you need to know
HTTPS: All you need to knowHTTPS: All you need to know
HTTPS: All you need to know
 
Discover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud WebinarDiscover the OVH Dedicated Cloud Webinar
Discover the OVH Dedicated Cloud Webinar
 
OVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service ProviderOVH Webinar: 10 questions you should ask your Cloud Service Provider
OVH Webinar: 10 questions you should ask your Cloud Service Provider
 
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
[FR] OVH Webinar : 10 questions à poser à votre Cloud Service Provider
 
Getting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load BalancingGetting Started With My Next-Gen IP Load Balancing
Getting Started With My Next-Gen IP Load Balancing
 
Lviv Outsourcing Forum 2016
Lviv Outsourcing Forum 2016 Lviv Outsourcing Forum 2016
Lviv Outsourcing Forum 2016
 
Puppet Troubleshooting
Puppet TroubleshootingPuppet Troubleshooting
Puppet Troubleshooting
 
RESTful API - Retour d'expérience
RESTful API - Retour d'expérienceRESTful API - Retour d'expérience
RESTful API - Retour d'expérience
 
API et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme NumériqueAPI et Mobile / Académies du Tourisme Numérique
API et Mobile / Académies du Tourisme Numérique
 
POO
POOPOO
POO
 
API pour les nuls
API pour les nulsAPI pour les nuls
API pour les nuls
 
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
VMworld 2015: The Future of Software- Defined Storage- What Does it Look Like...
 
Api types
Api typesApi types
Api types
 
Ubisoft
UbisoftUbisoft
Ubisoft
 

Similaire à [FR] C'est quoi une API ?

Joomla Days 2011 Lyon
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 Lyon
LeTesteur
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Jean-Laurent de Morlhon
 
Bureau Metier - Version 20061010
Bureau Metier - Version 20061010Bureau Metier - Version 20061010
Bureau Metier - Version 20061010
Didier Girard
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
Gregory Renard
 

Similaire à [FR] C'est quoi une API ? (20)

Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008Présentation OCS et GLPI aux Solutions Linux 2008
Présentation OCS et GLPI aux Solutions Linux 2008
 
Mysql
MysqlMysql
Mysql
 
Le Cloud IaaS & PaaS, OpenStack réseau et sécurité
Le Cloud IaaS & PaaS, OpenStack réseau et sécuritéLe Cloud IaaS & PaaS, OpenStack réseau et sécurité
Le Cloud IaaS & PaaS, OpenStack réseau et sécurité
 
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
 
Investir sur son API web (in French)
Investir sur son API web (in French)Investir sur son API web (in French)
Investir sur son API web (in French)
 
Meetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureMeetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec Azure
 
Nouveautés de App-V 5.0 et intégration avec System Center 2012
Nouveautés de App-V 5.0 et intégration avec System Center 2012Nouveautés de App-V 5.0 et intégration avec System Center 2012
Nouveautés de App-V 5.0 et intégration avec System Center 2012
 
2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions2018 06 nouvelles APIs checkpoint e-Xpert solutions
2018 06 nouvelles APIs checkpoint e-Xpert solutions
 
Joomla Days 2011 Lyon
Joomla Days 2011 LyonJoomla Days 2011 Lyon
Joomla Days 2011 Lyon
 
Intellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server InternalsIntellicore Tech Talk 10 - Apache Web Server Internals
Intellicore Tech Talk 10 - Apache Web Server Internals
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerceWordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
 
Gestion des APIs avec Azure API Management - Samir AREZKI
Gestion des APIs avec Azure API Management - Samir AREZKIGestion des APIs avec Azure API Management - Samir AREZKI
Gestion des APIs avec Azure API Management - Samir AREZKI
 
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
Ou sont mes beans, contrats et workflows ? WOA et REST: Un changement de ment...
 
Bureau Metier - Version 20061010
Bureau Metier - Version 20061010Bureau Metier - Version 20061010
Bureau Metier - Version 20061010
 
APIs dans Azure : serverless ou pas serverless?
APIs dans Azure : serverless ou pas serverless?APIs dans Azure : serverless ou pas serverless?
APIs dans Azure : serverless ou pas serverless?
 
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
Réduisez vos Coûts d'Administration et les Risques d'erreurs avec Windows Pow...
 
Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !Ma stack d'outils agiles, tout un programme !
Ma stack d'outils agiles, tout un programme !
 
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
Prez -chtijug-29032016-(micro)services, loadbalancing et gestion des erreurs ...
 
Asp Au Service Des Mv Ps
Asp Au Service Des Mv PsAsp Au Service Des Mv Ps
Asp Au Service Des Mv Ps
 

Plus de OVHcloud

Plus de OVHcloud (20)

OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups OVHcloud Startup Program : Découvrir l'écosystème au service des startups
OVHcloud Startup Program : Découvrir l'écosystème au service des startups
 
Fine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP modelsFine tune and deploy Hugging Face NLP models
Fine tune and deploy Hugging Face NLP models
 
How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020How can you successfully migrate to hosted private cloud 2020
How can you successfully migrate to hosted private cloud 2020
 
OVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data ProcessingOVHcloud Partner Webinar - Data Processing
OVHcloud Partner Webinar - Data Processing
 
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
OVHcloud Tech Talks S01E09 - OVHcloud Data Processing : Le nouveau service po...
 
Webinar - VPS New Range
Webinar - VPS New RangeWebinar - VPS New Range
Webinar - VPS New Range
 
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
OVHcloud Tech Talks S01E08 - GAIA-X pour les techs : OVHcloud & Scaleway vous...
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
OVHcloud Tech Talks S01E07 – Introduction à l’intelligence artificielle pour ...
 
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
OVHcloud Tech Talks Fr S01E06 – BeeGFS, un filesystem orienté performance, ma...
 
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
OVHcloud Tech Talks Fr S01E05 – L’opérateur Harbor, une nécessité pour certai...
 
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilitéOVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
OVHcloud Tech-Talk S01E04 - La télémétrie au service de l'agilité
 
OVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML servingOVHcloud TechTalks - ML serving
OVHcloud TechTalks - ML serving
 
Logs @ OVHcloud
Logs @ OVHcloudLogs @ OVHcloud
Logs @ OVHcloud
 
Les APIs OpenStack
Les APIs OpenStackLes APIs OpenStack
Les APIs OpenStack
 
1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage1 sysadmin vs 250 clusters de stockage
1 sysadmin vs 250 clusters de stockage
 
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
Migrer 3 millions de sites sans maitriser leur code source ? Impossible mais ...
 
Industrialize Machine Learning
Industrialize Machine Learning Industrialize Machine Learning
Industrialize Machine Learning
 
OVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud DatabasesOVHcloud – Enterprise Cloud Databases
OVHcloud – Enterprise Cloud Databases
 
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSXOVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
OVHcloud Hosted Private Cloud Platform Network use cases with VMware NSX
 

[FR] C'est quoi une API ?

  • 1. C'est quoi une API ? Et les API chez OVH Vincent Cassé Développeur
  • 2.
  • 3. 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 :
  • 4. À 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 :
  • 5. 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
  • 6. 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 :
  • 7. 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
  • 8. À 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 ?
  • 9. Les API OVH api.ovh.com Produits OVH api.runabove.com Labs OVH api.hubic.com hubiC API Authentification script-able Authentification OAuth2
  • 10. 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
  • 12. 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
  • 13. 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
  • 14. 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/
  • 15. 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" }
  • 17. La première requête ! GET https://eu.api.ovh.com/1.0/dedicated/server [ "ns1337.a.org", "ns42.a.org" ]
  • 18. 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)
  • 19. Comment utiliser l'API ? Sans réinventer la roue github.com/ovh
  • 21. Manager VPS personnalisé Comment redémarrer un VPS ?
  • 22. Manager VPS personnalisé import ovh client = ovh.Client() print client.post('/vps/vps42424242.ovh.net/reboot')
  • 23. 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 ?
  • 24. 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
  • 25. 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 ?
  • 26. Protéger ses déploiements import ovh client = ovh.Client() print client.post('/vps/vps42424242.ovh.net/createSnapshot') .git/hooks/pre-commit
  • 27. 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 ?
  • 28. 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
  • 29. 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; }
  • 30. 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 }
  • 31. 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)         
  • 32. Aller plus loin - https://api.{ ovh | runabove | soyoustart | kimsufi | hubic }.com - Les consoles - github.com/ovh - api-subscribe@ml.ovh.net