DY

10 API REST & JSON

Qu'est-ce qu'une API ?

Une API (Application Programming Interface) est une interface pour les applications; elle permet la manipulations de données, méthodes, fonctions etc. C'est un mécanisme à la base de tout génie logiciel complexe.

Une API REST

Nous allons voir dans cette partie comment développer une API en PHP qui retournera un résultat sous la forme d'une réponse au format JSON (JavaScript Object Notation).

REST (Representational State Transfer) est un standard créé en 2000 par Roy Fielding dans sa thèse "Architectural Styles and the Design of Network-based Software Architectures".

Les API sur Internet

Les API sont un moyen d’accéder aux données d’un site sans avoir l’autorisation d’accéder directement à la base de données. Il y a beaucoup de portails sécurisés permettant à vos applications web de manipuler les données renvoyées par ces sites.

L’exemple parfait est Twitter. Elle permet de lire la timeline d’une personne en particulier, de rechercher des statuts à partir d’un mot clé, de modifier les paramètres de votre compte, etc.

Ou encore l'API proposer par votre professeur durant ce cours à savoir allosaurus.delahayeyourself.info

REST et HTTP

Les API REST sont basées sur HTTP (Hypertext Transfer Protocol) le protocole au cœur du web ! Bien sûr, toutes les API ne sont pas basées sur HTTP, mais en choisissant une API REST, vous simplifiez l'intégration et l'utilisation de votre API en utilisant un protocole ouvert, standardisé et simple d'utilisation.

Les critères REST

Les API REST imitent la façon dont le web lui-même marche dans les échanges entre un client et un serveur. Une API REST est donc:

Pourquoi choisir JSON ?

Vous pouvez utiliser les API avec de nombreux langages et retourner les données de plusieurs façons. L’une d’elles est le JSON (JavaScript Object Notation). C’est un format de données léger, facile à lire et à écrire et compatible avec pas mal de langages de développement.

Sa structure est composée d’objets et de tableaux. Sa flexibilité fait de JSON le parfait candidat pour retourner des données.

Une API avec PHP & Flight

Pour créer une api rien de bien complexe, il suffit de:

  1. Définir une route (par exemple /api/helloworld),
  2. Retourner des données au format JSON depuis cette route.

Notre première API

Nous souhaitons créer une API associé à la route /api/helloworld qui nous retourne un résultat équivalent à:

{"data":"Hello World!"}
Mise en place d'un test d'intégration

Nous allons créer une nouvelle classe de test (donc un nouveau fichier php dans le répertoire tests) ApiTest qui servira à .. tester notre api !

<?php
require_once 'vendor/autoload.php';

class ApiTest extends IntegrationTest{

    public function test_api_helloworld()
    {
        $response = $this->make_request("GET", "/api/helloworld");
        $this->assertEquals(200, $response->getStatusCode());
        $this->assertContains("application/json", $response->getHeader('Content-Type')[0]);


        $body = $response->getBody()->getContents();

        $json_result = json_encode(['data' => 'Hello World!']);

        $this->assertEquals($json_result, $body);
    }
}

Le test test_api_helloworld effectue une requête sur /api/helloworld et vérifie les assertions suivantes:

Création de notre api

Voici le code de notre route:

<?php
Flight::route('/api/helloworld', function(){
    $data = [
        'data' => 'Hello World!',
    ];
    Flight::json($data);
});

Flight nous permet de retourner directement des données au format JSON via la méthode Flight::json.

À vous de jouer

  1. Créer une route (et les tests associés) /api/helloworld/@name qui retourne Hello $name,
  2. Créer une route (et les tests associés) /api/users qui retourne l'ensemble des utilisateurs de la base de données tweets.
  3. Créer une route /api/user/@username qui retourne un utilisateur selon son nom d'utilisateur et l'ensemble de ses tweets.