Criando APIs com micro framework RESPECT e Jelastic
Size: 632.62 KB
Language: pt
Added: Oct 04, 2015
Slides: 40 pages
Slide Content
Criando APIs
usando o micro-framework
Respect
Ivan Rosolen
Graduado em Sistemas de Informação
Pós-graduado em Gerência de Projetos
Desenvolvedor a 14+ anos
Autor de vários PHPT (testes para o PHP)
Entusiasta de novas tecnologias
Head of Innovation @ Arizona
CTO @ Mokation
@ivanrosolen
API
Vantagens
- Troca de informações entre sistemas
- Múltiplas interfaces (web, mobile, CLI)
- Módulos/Componentes
- HTTP Status Codes
- Controle de Acesso
- Apenas arquivos .INI
- Usa o mesmo parser nativo e rápido do php.ini
- Extende o arquivo .INI com seu próprio “dialeto”
- Implementa lazy loading para instâncias de objeto
- Quase zero de configuracão (convenção)
- Fluent interface: $mapper->author[7]->fetch();
- Diferentes tipos de banco de dados
- Registros são tratados como Plain Data Object
https://github.com/Respect/Relational
<?php
use Respect\Relational\Mapper;
// criar instância PDO com o banco
$mapper = new Mapper(new PDO('seudsn'));
// buscar todos os autores
$authors = $mapper->author->fetchAll();
// criar objeto de um registro
$obj = new stdClass;
$obj->name = 'Ivan Rosolen';
// "gravar" informação no banco
$mapper->author->persist($obj);
$mapper->flush();
Respect/Validation
- Fluent/Chained interface: v::numeric()->positive()->between(1,
256)->validate($num)
- 100+ validadores testados
- Fácil extender ou criar novas regras (Concrete API)
- Php 7 ( Quase pronto )
https://github.com/Respect/Validation
use Respect\Validation\Validator as v;
// validar número simples
v::numeric()->validate(42); //true
// validar em cadeia
$v = v::arr() // validar se é array
->key('nome', $rule = v::alnum()->notEmpty()->noWhitespace()) // validar a key 'nome'
->key('estilo', $rule) // utilizando a mesma regra da key de cima
->validate($_POST['cerveja']);
// negação de qualquer regra
$v = v::not(v::int())->validate(10); // false
// operadores lógicos
v::allOf(v::numeric(), v::hexa(), v::min(1)); // numeric, hexadecimal e pelo menos 1
v::oneOf(v::nullValue(), v::numeric()); // null ou numeric
Respect/Router
- Thin and lightweight controller para aplicações
RESTful e APIs
- “Don't try to change PHP, small learning curve.”
- If/Before/After/Accept/Auth/Any/By …
https://github.com/Respect/Rest
<?php
use Respect\Rest\Router;
// Criar instância do router
$router = new Router; // raiz http://example.com/
// instância para trabalhar em uma subpasta
$router = new Router('/pasta'); // raiz http://example.com/pasta
// Olá mundo
$router->get('/', function() {
return 'Hello World';
});
<?php
require_once realpath(__DIR__ . '/vendor/autoload.php');
use Respect\Rest\Router;
use Respect\Config\Container;
use Respect\Validation\Validator as v;
use Respect\Relational\Mapper;
//Ler arquivo de configuração
$config = new Container('config.ini');
// Criar instância PDO com o SQLite usando as configs
$mapper = new Mapper(new PDO($config->dsn_sqlite));
// Criar instância do router
$router = new Router();
//Rota para qualquer tipo de request (any)
$router->any('/', function () {
return 'RestBeer!';
});
GET Cerveja
$router->get('/cerveja/*', function ($data = null) use ($mapper) {