[FR] C'est quoi une API ?

download [FR] C'est quoi une API ?

of 32

  • date post

    14-Jan-2017
  • Category

    Technology

  • view

    2.509
  • download

    1

Embed Size (px)

Transcript of [FR] C'est quoi une API ?

  • C'est quoi une API ?Et les API chez OVH

    Vincent CassDveloppeur

  • Pourquoi des API ?

    - Donnes sont affiches dans un navigateur, avec un design- Pas de structure dfinie- Destin tre compris par des humains

    - Donnes structures en fonction de leur contenu- Rendu brut, sans affichage particulier- Permet l'utilisation automatis de ces donnes (donc par des machines)

    Du site web :

    Aux API :

  • quoi servent les API ?

    - Avoir une interface simple pour grer des produits- Crer des applications pour des usages spcifiques- Crer une interaction avec d'autres sites et logiciels- Inventer de nouveaux usages

    - Protger les accs 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 dveloppeurs :

    Pour le fournisseur :

  • Les API : interface entre 2 services

    - Socket : transfert brut de donnes entre deux service applications lies- RPC : dfinition d'une interface en C applications lourdes- SOAP : dfinition d'une interface sur HTTP et format avec XML- REST : dfinition 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}/recordPOST /domain/zone/{my_zone}/recordGET /domain/zone/{my_zone}/record/{one_id_record}

    Exemples :

  • Avantages et inconvnients de REST

    - Utilise un protocole accessible partout : HTTP- Beaucoup de langages possdent un mapping avec HTTP- Simple comprendre et tester

    Avantages

    - Le serveur ne peut pas initier la conversation

    Inconvnient

  • quoi servent les API ?

    - Grer ses produits sans passer par les espaces client- Supprimer de nombreuses actions manuelles- Simplifier les dploiements- Amliorer ses processus de tests et d'intgration continue- Configurer rapidement des systmes complexes...

    - Tous les produits pourront se grer depuis lAPI- L'espace client est bas sur ces API

    By OVH

    Pour quoi faire ?

  • Les API OVH

    api.ovh.comProduits OVH

    api.runabove.comLabs OVH

    api.hubic.comhubiC API

    Authentification script-able Authentification OAuth2

  • Les API OVH

    api.soyoustart.comLabs serveurs ddis

    api.kimsufi.comServeurs ddis discount

    Deprecatedovh.com/soapi/fr/

    Authentification script-able Ancienne API SOAPi

  • Dcouvrir 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 dporte chez OVH- Ne partage pas le mot de passe avec lapplication tierce- Token d'authentification envoy l'API chaque requte : la Consumer key - Validation du token par l'utilisateur et uniquement depuis {ovh.com|runabove.com}

    Droits daccs

    Utilisateur Application

    Consumerkey

  • Authentification Script-ableGranularit des droits- Droits diffrents pour chaque Consumer Key- Limitation du primtre des appels en fonction des URL- Droits dcrits 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

    Crer 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/

    https://api.runabove.com/createApp/https://eu.api.kimsufi.com/createApp/

  • Authentification Script-ableRcuprer 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 premire requte !

    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 gnre l'aide des informations de la requte

    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+"+"+TSTAMP)

  • Comment utiliser l'API ?Sans rinventer la roue

    github.com/ovh

  • Utilisations basiques avances

  • Manager VPS personnalis

    Comment redmarrer 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 scurit impacte un port sur vos serveurs Comment appliquer une rgle sur les IP protges par le firewall OVH ?

  • Effectuer des actions de massedef 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

  • Protger ses dploiements

    Votre configuration Puppet est sur Git et vous dployez automatiquement Comment crer un snapshot chaque commit avec lAPI OVH et les hooks Git ?

  • Protger ses dploiements

    import ovh

    client = ovh.Client()

    print client.post('/vps/vps42424242.ovh.net/createSnapshot')

    .git/hooks/pre-commit

  • Grer les pics de charge

    Un site e-commerce peut subir de fortes chargesComment ajouter des serveurs PHP-FPM + Nginx lors de ces pics ?

  • Grer les pics de charge

    - Une IP load balancing- Un serveur web permanent- Un ou plusieurs /cloud en fonction de charge

    Serveur webServeur /cloud

    Outils ncessaires

  • Grer les pics de chargeConnatre 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;}

  • Grer les pics de charge

    curl http://mon_serveur_php/status?json

    Connatre 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}

  • Grer les pics de chargeDmarrer un serveur cloud

    flavor = "550757b3-36c2-4027-b6fe-d70f45304b9c"; #VPS-SSD-1 BHSimage = "1b042c00-5978-4d75-9a7e-0d7f6ed5be76"; # Ubuntu 15.10 BHSproject_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

    Diapo 1Diapo 2Diapo 3Diapo 4Diapo 5Diapo 6Diapo 7Diapo 8Diapo 9Diapo 10Diapo 11Diapo 12Diapo 13Diapo 14Diapo 15Diapo 16Diapo 17Diapo 18Diapo 19Diapo 20Diapo 21Diapo 22Diapo 23Diapo 24Diapo 25Diapo 26Diapo 27Diapo 28Diapo 29Diapo 30Diapo 31Diapo 32