Coneixements previs

Exemple: Gestió d'usuaris

<?php

use Predis\Client;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
use Slim\Interfaces\RouteCollectorProxyInterface as Group;

require __DIR__ . '/vendor/autoload.php';

$app = AppFactory::create();

$app->group('/users', function (Group $group) {
    $group->get('/{id}', function (Request $request, Response $response, $args) {

        $id = $args['id']; // TODO cast to int
        $client = new Client();
        $user = $client->get($id);

        if (!isset($user)) {
            $response = $response->withStatus(404); // Not found
            // TODO return json error
        } else {
            $payload = unserialize($user);
            $response->getBody()->write($payload);
            $response = $response
                ->withHeader('Content-Type', 'application/json')
                ->withStatus(201);
        }

        return $response;
    });

    $group->get(
        '/add/{name}',
        function (Request $request, Response $response, $args) {

            $name = $args['name'];

            $id = 1;
            $user = new User($id, $name);
            $user = json_encode($user);

            $client = new Client();
            $client->set($id, $user);

            $response->getBody()->write($user);
            $response = $response
                ->withHeader('Content-Type', 'application/json')
                ->withStatus(201);

            return $response;
        }
    );
});

$app->run();

class User
{
    public int $id;
    public string $name;

    public function __construct(int $id, string $name)
    {
        $this->id = $id;
        $this->name = $name;
    }
}

Instala els recursos necessaris:

sudo docker run --name m7-redis -d redis
composer require predis/predis

Interactua amb l'aplicació:

php -S http://localhost:3000

curl -v localhost:3000/users/3

curl localhost:3000/users/add/joana
curl localhost:3000/users/1

I utiliza redis-cli per actuar directament amb Redis:

sudo docker exec -it m7-redis sh
redis-cli
get 1

JSON

JSON (JavaScript Object Notation) és un format de text sencill d’intercanvi d'objectes. Per a les persones i les màquines és fàcil de llegir i escriure. És basa en un subconjunt de l'estàndard de llenguatge de programació JavaScript ECMA-262.

JSON s'utilitza habitualment per:

  • Transmetre dades en aplicacions web des del servidor al client, de manera que es poden mostrar en una pàgina web o viceversa. Tots els frameworks javascript com Node.js, Vue.js, AngularJS, Ember.js, o React necessiten una api en el servidor web que els permeti actuar intercanviant JSON (no volen pàgines HTML).

  • Transmetre dades entre un client (pot ser un navegador o un servidor) i un servidor que ofereix serveis ("Web Service). Per exemple, si el teu servidor vol guardar objectes en Amazon S3, o vols utilitzar les APIs de Google per utilitzar els seus serveis de búsqueda, google maps, etc., hauras d'utilitzar HTTP i JSON.