atualizado da versão 3 RC6 para suporte PHP mais recente
Restler é um servidor Web API multiformato simples e eficaz escrito em PHP.
Basta lidar com sua lógica de negócio em php, o Restler cuidará do REST!
@url GET my/custom/url/{param}
comentários PHPDoc A versão mais estável e recente está na ramificação master
, as versões anteriores estão nas ramificações de versão como v4
, v3
, v2
e v1
.
A ramificação da versão com a versão atual, como v5
é usada para construir a próxima versão. Sua documentação pode não ser atualizada com frequência e, portanto, reservada para os mais ousados.
Ramos de recursos como features/html
e features/router
são puramente para fins de experimentação para testar um recurso. Eles podem ser mesclados quando estiverem prontos.
Instale este repositório para experimentar os exemplos.
Certifique-se de que o PHP 5.4 ou superior esteja disponível em seu servidor. Recomendamos usar a versão mais recente para melhor desempenho.
Restler usa o Composer para gerenciar suas dependências. Primeiro, baixe uma cópia do composer.phar
. Ele pode ser mantido na pasta do seu projeto ou, idealmente, em usr/local/bin
para usá-lo globalmente em todos os seus projetos. Se você estiver no Windows, poderá usar o instalador do Windows do compositor.
Você pode instalar o Restler executando o comando create project em seu terminal. Substitua {projectName} pelo nome real do seu projeto. Ele criará uma pasta com esse nome e instalará o Restler.
php composer.phar create-project luracast/restler {projectName}
Observação:-
Se você não quiser os formatos adicionais e ferramentas BDD, você pode incluir >
--no-dev
para impor a exclusão de pacotes de desenvolvimento.Se você quiser experimentar o branch Bleading Edge v3 ou qualquer um dos feature> branchs, inclua
3.x-dev
oudev-features/html
no comando acima
Após instalar o Composer, baixe a versão mais recente do framework Restler e extraia seu conteúdo em um diretório em seu servidor. A seguir, na raiz do seu projeto Restler, execute o comando php composer.phar install
(ou composer install
) para instalar todas as dependências do framework. Este processo requer que o Git esteja instalado no servidor para concluir a instalação com êxito.
Se você deseja atualizar a estrutura Restler, você pode emitir o comando php composer.phar update
.
Nota: – Se você não tem permissão para instalar o compositor e o git em seu servidor, você pode instalá-los e executá-los em sua máquina de desenvolvimento. Os arquivos e pastas resultantes podem ser carregados e usados no servidor.
Idealmente, a pasta pública deve ser mapeada como sua raiz da web. É opcional, mas é recomendado evitar a exposição de arquivos e pastas desnecessários.
Experimente os exemplos ao vivo em seu host local.
Você pode iniciar o servidor integrado do PHP com o comando
composer serve
.
Atualize o base_url especificado em behat.yml
e tente o seguinte comando
vendor/bin/behat
alternativamente, você pode executar
composer test
Isto irá testar os exemplos em relação aos comportamentos esperados, por exemplo
Feature : Testing CRUD Example
Scenario : Creating new Author with JSON
Given that I want to make a new "Author"
And his "name" is "Chris"
And his "email" is "[email protected]"
And the request is sent as JSON
When I request "/examples/_007_crud/authors"
Then the response status code should be 200
And the response should be JSON
And the response has a "id" property
Tudo pronto, feliz RESTling! :)
Temos duas opções para criar seu próprio servidor restler api
A opção mais conveniente é usar modelos de aplicativos como o Restler Application, que possui integrações com vários pacotes para nos ajudar também com a lógica de negócios. Se você escolher esta opção, selecione uma ramificação nesse repositório e prossiga com as instruções disponíveis lá.
Crie um projeto do zero para ter controle total sobre todos os aspectos do seu aplicativo. Se você escolher esta opção, siga as etapas abaixo.
composer init
e siga em frente para criar composer.json
restler/framework
e ^5
para a restrição de versão.composer require restler/framework:^5
estamos usando
restler/framework
em vez deluracast/restler
para reduzir o espaço necessário para o pacote. Ele vem de https://github.com/Luracast/Restler-Framework e contém apenas o conteúdo da pasta src aqui.
Mesmo quando você está construindo do zero, verificar os modelos de aplicativos o ajudará nas decisões de estrutura de pastas e na localização de outros pacotes úteis.
Crie suas classes de API com todos os métodos públicos e protegidos necessários
Crie o gateway (public/index.php) da seguinte forma
<?php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
use Luracast Restler Restler ;
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> handle (); //serve the response
Habilitar reescrita de URL
Certifique-se de que todas as solicitações vão para index.php ativando a reescrita de URL para o seu site
Por exemplo:-
Se você estiver no Apache, poderá usar um arquivo .htaccess como
DirectoryIndex index.php
< IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
</ IfModule >
< IfModule mod_php5.c>
php_flag display_errors On
</ IfModule >
Nota: – Isso requer que
AllowOverride
seja definido comoAll
em vez deNone
no arquivohttpd.conf
e pode exigir alguns ajustes em algumas configurações do servidor. Consulte a documentação do mod_rewrite para obter mais informações.
Se você estiver no Nginx, certifique-se de definir o server_name
e passar os scripts PHP para fast cgi (PHP-FPM) ouvindo 127.0.0.1:9000
server {
listen 80;
server_name api.luracast.com; //change it to match your server name
//... other stuff
location ~ .php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
//... other stuff
}
Nota: – Isso requer que PHP, PHP-FPM estejam instalados e configurados corretamente. Consulte o exemplo PHP FastCGI para obter mais informações.
Ajuste fino para atender às suas necessidades
<?php
require_once __DIR__ . ' /../vendor/autoload.php ' ;
use Luracast Restler Restler ;
use Luracast Restler Defaults ;
//set the defaults to match your requirements
Defaults:: $ throttle = 20 ; //time in milliseconds for bandwidth throttling
//setup restler
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> addAPIClass ( ' Explorer ' ); //from restler framework for API Explorer
$ r -> addFilterClass ( ' RateLimit ' ); //Add Filters as needed
$ r -> handle (); //serve the response
Explore a API e experimente abrindo explorer/index.html
na raiz da web em seu navegador
Boa exploração! :)
Nota: - O uso do eAccelerator pode fazer com que o Restler falhe, pois remove os comentários. Mais informações podem ser encontradas aqui
Restler suporta anotações na forma de comentários PHPDoc para ajuste fino de API
Eles estão documentados em detalhes em Anotações
Para proteger sua API, autentique e permita usuários válidos
<?php
require_once ' ../restler.php ' ;
use Luracast Restler Restler ;
$ r = new Restler ();
$ r -> addAPIClass ( ' YourApiClassNameHere ' ); // repeat for more
$ r -> addAuthenticationClass ( ' CustomAuth ' ); //Add Authentication classes as needed
$ r -> handle (); //serve the response
Por padrão, o Restler é executado no modo de depuração, mais ajustado para o desenvolvedor de API, mostrando mensagens de erro detalhadas e embelezando o resultado da API para o formato readbale humano
Ao ativar o modo de produção, você obterá algum aumento de desempenho, pois armazenará em cache as rotas (a análise de comentários acontece apenas uma vez, em vez de cada chamada de API), alguns outros arquivos e evitará fornecer informações de depuração
<?php
require_once ' ../restler.php ' ;
use Luracast Restler Restler ;
//setup restler
$ r = new Restler ( true ); //turn on production mode by passing true.
//If you are using file based cache (the default) make sure cache folder is
//writable. when you make changes to your code make sure you delete the
// routes.php inside the cache folder
//...
Nota: - Quando o modo de produção é definido como
true
, ele sempre usa o cache e não detecta alterações e novas rotas, se houver. Seu pipeline de integração contínua ou seu gancho git deve excluir esse arquivo durante o processo de implantação. Alternativamente, você pode passar o segundo parâmetro para o construtor restler para atualizar o cache quando as alterações precisarem ser aplicadas.
composer serve
.composer test
após executar o servidor com composer serve
em outra janela.$restler->addAPIClass("Luracast/Restler/Explorer", 'swagger')
mapeia-o para /swagger
.A classe Routes foi aprimorada para fornecer um método findAll para listar todas as rotas para uma versão específica da API, excluindo os caminhos e métodos http especificados.
As propriedades mágicas utilizadas pelas rotas quando encontradas, ignorando as propriedades reais. Isso é útil para classes de modelo dinâmico, como Eloquent.
As rotas agora permitem que @required
e @properties
sejam arrays quando o parâmetro é um objeto. Isso nos ajuda a escolher as propriedades para cada método de API de maneira diferente. Exemplo {@properties property1,property2,property3}
{@required property1,property2}
cria uma API para procurar apenas 3 propriedades e 2 delas são obrigatórias.
Otimizou a classe Nav. Agora faz uso de Routes::findAll()
, junto com a classe Explorer
A classe Restler possui o método setBaseUrls para definir URLs base aceitáveis que podem ser definidos usando $_SERVER['HTTP_HOST']
. Leia este artigo para entender o porquê. Isto é útil nos seguintes casos quando
A classe Restler agora permite substituir o código de status definindo $this->restler->responseCode
no método API.
Classe Forms aprimorada para enviar as propriedades incorporadas ao modelo emmet. Por exemplo
/**
* {@id form1}
*
* @param string $name
* @param int $age
*/
Gera o seguinte formulário
<form role="form" id="form1" method="POST" ...
porque o modelo emmet contém um id (veja abaixo)
form[role=form id=$id# name=$name# method=$method# action=$action# enctype=$enctype#]
@param
para definir atributos HTML (por exemplo, id, aceitar etc.) facilmente@class
. Exemplo: - @class Validator {@holdException}
faz com que o validador retenha as exceções em vez de lançar@property
, @property-read
, @property-write
para suportar a documentação das propriedades dinâmicas.string[]
, DateTime[]
Scope::$resolver
.String
renomeada para Text
para suporte ao PHP 7 (String é uma palavra-chave reservada no php7)