SlideShare ist ein Scribd-Unternehmen logo
1 von 66
Downloaden Sie, um offline zu lesen
RESTFUL webservicesConstruindo Apis
http://bit.ly/ZhgkiB
Agenda
Eu
API's
Frapi
Demo
Mercantólogo por formação, desenvolvedor por paixão!
Ativista por consciência!
Alex Piaz (@zaip)
alex@piaz.com.br
http://www.zaip.net
Há 15+ anos nas interwebs...
Há 13 anos...
1998
Há 7 anos...
1998
www.socioambiental.org
Gleilson Miranda/Secretaria de Comunicação do Estado do Acre/FUNAI
Chefe Almir Suruí
1998
É só fazer um "XML" que
resolve....
É só fazer um "XML" que
resolve....
Ao vivo é muito pior!
Ao vivo é muito pior!
http://www.youtube.com/watch?v=9C-IDT__1HE
APIhttp://en.wikipedia.org/wiki/Application_programming_interface
UMA API É UM CONTRATO !
Controle de acesso
IDENTIFICACAO
http://blogs.estadao.com.br/radar-pop/homem-e-preso-em-recife-por-apresentar-rg-com-foto-de-jack-nicholson/
Autorização
Uso
Documentação
Formatos de saída
versões
Mensagens!
ReST
Representational State Transfer
http://alganet.github.io/rest-client-side/#/rest-roy
Estilo Arquitetural
HTTP
RFC 2616
HTTP PARA DESIGNERS
Cliente / Servidor
Interface Uniforme
Camadas
Stateless
Cache
ReSTafarianos x Pragmaresticos
ReST Constraints
● Cliente/Servidor
● Interface Uniforme
● Cache
● Stateless
● Camadas
● Código sob demanda *
Recursos :: URLs + Verbos HTTP
Interface Uniforme
GET http://api.piaz.com.br/ufoapi/v1/casos/1
POST http://api.piaz.com.br/ufoapi/v1/casos/1
PUT http://api.piaz.com.br/ufoapi/v1/casos/1
DELETE http://api.piaz.com.br/ufoapi/v1/casos/1
HEAD http://api.piaz.com.br/ufoapi/v1/casos/1
Recursos são substantivos
Prefira o plural ao singular
2 URLs por recurso
Manipulação dos recursos através de suas representações
Interface Uniforme
GET http://api.piaz.com.br/ufoapi/v1/casos/1
Mensagens auto-descritivas
Interface Uniforme
Cabeçalhos e Status Codes do HTTP
1xx - Informativo
2xx - Sucesso
3xx - Redirecionamento
4xx - Erro do cliente
5xx - Erro do servidor
http://stateless.co/hal_specification.html
HAL
Hypertext Application Language
HATEOAS - Hypermedia as the Engine of Application State
Interface Uniforme
{
"_links": {
"self": { "href": "/ufoapi/v1/casos/2" },
"next": { "href": "/ufoapi/v1/casos/3" },
"prev": { "href": "/ufoapi/v1/casos/1" },
} ,
}
WRML
Web resource modeling language
http://www.wrml.org/modelingLanguage
Richardson Maturity Model
E o FRAPI entra em cena!
http://getfrapi.com
FRAMEWORK API
INSTALAÇÃO
INSTALAÇÃO / Requisitos mínimos
○ Webserver (apache, nginx, iis)
○ PHP >= 5.2.4
○ gettext
○ XMLWriter
○ PEAR
○ APC *
* Pode ser instalado sem o APC ou com outro
mecanismo de caching mas não é recomendado
http://frapi.github.com/installing/caching.html
http://frapi.github.com/installing/index.html
git clone git://github.com/frapi/frapi.git
git clone git://github.com/zaip/frapi.git
ou
wget https://github.com/frapi/frapi/tarball/master
tar -xzvf frapi-frapi-VERSION.tar.gz
FRAPI_PATH = local/onde/voce/desempacotou/o/frapi
INSTALAÇÃO / Obtendo o software
Interface administrativa API Pública
Camadas de interação
● Zend Framework
● Actions e Errors
● Autenticação
● Documentação
● Ambiente de testes
● Produção
● PHP
● Cache
● Request
● Response
Interface CLI
● Admin via terminal
<VirtualHost *:80>
ServerName admin.frapi
DirectoryIndex index.php
ServerAdmin admin@api.frapi
# This should be omitted in the production
environment
SetEnv APPLICATION_ENV development
DocumentRoot FRAPI_PATH/src/ frapi/admin/public
<Directory FRAPI_PATH/src/frapi/admin/public>
AllowOverride All
Order deny,allow
Allow from All
</Directory>
</VirtualHost>
Interface Administrativa
<VirtualHost *:80>
ServerName api.frapi
ServerAdmin admin@api.frapi
DocumentRoot FRAPI_PATH/src/ frapi/public
# This should be omitted in the production
environment
SetEnv APPLICATION_ENV development
<Directory FRAPI_PATH/src/frapi/public>
AllowOverride All
Order deny,allow
Allow from All
</Directory>
</VirtualHost>
API Pública
INSTALAÇÃO / Configurando
2 virtual host
Permissões de acesso
chown -R username.web-user FRAPI_PATH
chmod 775 FRAPI_PATH/src/frapi/custom/Action
chmod 775 FRAPI_PATH/src/frapi/custom/Config/
chmod 664 FRAPI_PATH/src/frapi/custom/Config/*.xml
Dá pra instalar sem 2 vhosts?
http://www.felipemarques.com.br/tag/alex-piaz/
SIM
INSTALAÇÃO / Finalizando
UFO API
Principais casos da Ufologia Mundial REST!
CRUD
UFO API
Modelo
Mensagens de erro (Not found [404] / NO PUT/DELETE/POST [405] )
2 URLs === 2 actions
//api.piaz.com.br/ufoapi/v1/casos (GET POST)
//api.piaz.com.br/ufoapi/v1/casos/{id} (GET PUT DELETE)
Complexidade vai na Query String
//api.piaz.com.br/ufoapi/v1/casos?pais=Brasil
Principais casos da Ufologia Mundial em ReSTFul!
UFO APIPrincipais casos da Ufologia Mundial REST!
Custom_Model_Caso()
getCasos()
getCaso($id)
getCasosPorPais($pais)
insertCaso($data)
updateCaso($id,$data)
deleteCaso($id)
FRAPI_PATH/src/frapi/custom/Action
UFO APIPrincipais casos da Ufologia Mundial em ReSTFul!
Métodos disponibilizados pelo FRAPI
executeGet()
executePost()
executePut()
executeDelete()
executeHead()http://frapi.github.com/developing/coding-actions.html
UFO APIPrincipais casos da Ufologia Mundial em ReSTFul!
Mensagens de erro
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
UFO APIAction Casos - http://ufo-api.piaz.com.br/casos (GET POST HEAD)
UFO APIAction Casos - http://api.piaz.com.br/ufoapi/v1/casos (GET)
UFO APIAction Casos - http://api.piaz.com.br/ufoapi/v1/casos (POST)
UFO APIAction Casos - http://api.piaz.com.br/ufoapi/v1/casos (HEAD)
UFO APIPrincipais casos da Ufologia Mundial ReST!
http://api.piaz.com.br/ufoapi/v1/casos/{id} (POST PUT DELETE)
UFO APIAction Caso - http://api.piaz.com.br/ufoapi/v1/casos/{id} (GET)
UFO APIAction Caso - http://api.piaz.com.br/ufoapi/v1/casos/{id} (PUT)
UFO APIAction Caso - http://api.piaz.com.br/ufoapi/v1/casos/{id} (DELETE)
Gerando documentação...
http://frapi-admin/docs/generate/format/text
http://frapi-admin/docs/generate/format/html
http://frapi-admin/docs/generate/format/mdown
http://frapi-admin/docs/generate/format/pdf
Utilidades
implementing-rest
Exploring the implementation aspects of the REST architectural style.
https://code.google.com/p/implementing-rest/
PostMan - Rest Client para o Chrome
https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm
Tese do Roy Fieldling (nascimento do ReST)
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
Richardson Maturity Model
http://martinfowler.com/articles/richardsonMaturityModel.html
Swagger (Documentação para sua API)
https://developers.helloreverb.com/swagger/
API Best Pratices
http://apigee.com/about/api-best-practices
HTTP (RFC 2616)
http://tools.ietf.org/html/rfc2616
Arquivos desta palestra
https://www.dropbox.
com/sh/u0qqmm49ursrtpg/mofogHmsIi
ReSTFul Api's com FRAPI

Weitere ähnliche Inhalte

Andere mochten auch

Enterey Overview 2012 V5
Enterey Overview 2012 V5Enterey Overview 2012 V5
Enterey Overview 2012 V5rjohnston2268
 
The Big Dutch 20 Year 730 Million Page Digitisation Challenge
The  Big Dutch 20 Year  730 Million Page Digitisation  ChallengeThe  Big Dutch 20 Year  730 Million Page Digitisation  Challenge
The Big Dutch 20 Year 730 Million Page Digitisation ChallengeOlaf Janssen
 
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...Olaf Janssen
 
PHP e a Geoweb
PHP e a GeowebPHP e a Geoweb
PHP e a GeowebAlex Piaz
 
Going mobile in accounting education upload
Going mobile in accounting education uploadGoing mobile in accounting education upload
Going mobile in accounting education uploadYaneli Cruz
 
Optify Best Practices - Lead Generation Campaigns
Optify Best Practices - Lead Generation CampaignsOptify Best Practices - Lead Generation Campaigns
Optify Best Practices - Lead Generation CampaignsOptify
 
eMundus project: open education and international academic collaboration
eMundus project: open education and international academic collaborationeMundus project: open education and international academic collaboration
eMundus project: open education and international academic collaborationFabio Nascimbeni
 
σεμινάριο στη δυναμική των ομάδων στη Ξάνθη
σεμινάριο στη δυναμική των ομάδων στη Ξάνθησεμινάριο στη δυναμική των ομάδων στη Ξάνθη
σεμινάριο στη δυναμική των ομάδων στη ΞάνθηChristos Gotzaridis
 
Defensive driving النقطة العمياء لسائقي السيارات
Defensive driving النقطة العمياء لسائقي السياراتDefensive driving النقطة العمياء لسائقي السيارات
Defensive driving النقطة العمياء لسائقي السياراتamr hassaan
 
eLearning in Europe: overview and debate
eLearning in Europe: overview and debateeLearning in Europe: overview and debate
eLearning in Europe: overview and debateFabio Nascimbeni
 
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...Olaf Janssen
 
Cooperacion academica y educacion abierta
Cooperacion academica y educacion abiertaCooperacion academica y educacion abierta
Cooperacion academica y educacion abiertaFabio Nascimbeni
 
Google App Engine Google Apps
Google  App  Engine  Google  AppsGoogle  App  Engine  Google  Apps
Google App Engine Google AppsJuan Pittau
 

Andere mochten auch (19)

Enterey Overview 2012 V5
Enterey Overview 2012 V5Enterey Overview 2012 V5
Enterey Overview 2012 V5
 
Star Work sheet
Star Work sheetStar Work sheet
Star Work sheet
 
The Big Dutch 20 Year 730 Million Page Digitisation Challenge
The  Big Dutch 20 Year  730 Million Page Digitisation  ChallengeThe  Big Dutch 20 Year  730 Million Page Digitisation  Challenge
The Big Dutch 20 Year 730 Million Page Digitisation Challenge
 
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...
TheEuropeanLibrary.org - a (non technical) case study. Olaf Janssen lecturing...
 
PHP e a Geoweb
PHP e a GeowebPHP e a Geoweb
PHP e a Geoweb
 
Going mobile in accounting education upload
Going mobile in accounting education uploadGoing mobile in accounting education upload
Going mobile in accounting education upload
 
Optify Best Practices - Lead Generation Campaigns
Optify Best Practices - Lead Generation CampaignsOptify Best Practices - Lead Generation Campaigns
Optify Best Practices - Lead Generation Campaigns
 
eMundus project: open education and international academic collaboration
eMundus project: open education and international academic collaborationeMundus project: open education and international academic collaboration
eMundus project: open education and international academic collaboration
 
Lat i long
Lat i longLat i long
Lat i long
 
σεμινάριο στη δυναμική των ομάδων στη Ξάνθη
σεμινάριο στη δυναμική των ομάδων στη Ξάνθησεμινάριο στη δυναμική των ομάδων στη Ξάνθη
σεμινάριο στη δυναμική των ομάδων στη Ξάνθη
 
Defensive driving النقطة العمياء لسائقي السيارات
Defensive driving النقطة العمياء لسائقي السياراتDefensive driving النقطة العمياء لسائقي السيارات
Defensive driving النقطة العمياء لسائقي السيارات
 
Crib Blogger
Crib  BloggerCrib  Blogger
Crib Blogger
 
eLearning in Europe: overview and debate
eLearning in Europe: overview and debateeLearning in Europe: overview and debate
eLearning in Europe: overview and debate
 
Symmetry
SymmetrySymmetry
Symmetry
 
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...
Open data sets of the Koninklijke Bibliotheek - Opportunities for reuse on Wi...
 
Cooperacion academica y educacion abierta
Cooperacion academica y educacion abiertaCooperacion academica y educacion abierta
Cooperacion academica y educacion abierta
 
Google App Engine Google Apps
Google  App  Engine  Google  AppsGoogle  App  Engine  Google  Apps
Google App Engine Google Apps
 
Direct access
Direct accessDirect access
Direct access
 
Ok
Ok Ok
Ok
 

Ähnlich wie ReSTFul Api's com FRAPI

Php7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberPhp7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberEr Galvão Abbott
 
Otimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPOtimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPEr Galvão Abbott
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPelliando dias
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-phpBrenno Abreu
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonfelipe bastosweb
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrerMichele Silva
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPRamon Ribeiro Rabello
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porteFelipe Ribeiro
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
TDC2016POA | Trilha IoT - Controlando AR Drone com PHP
TDC2016POA | Trilha IoT -  Controlando AR Drone com PHPTDC2016POA | Trilha IoT -  Controlando AR Drone com PHP
TDC2016POA | Trilha IoT - Controlando AR Drone com PHPtdc-globalcode
 
Os 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulOs 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulKleber Bacili
 
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017Renato Groff
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyRelsi Maron
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Er Galvão Abbott
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptIvan Paulovich
 

Ähnlich wie ReSTFul Api's com FRAPI (20)

Php7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saberPhp7 esta chgando! O que você precisa saber
Php7 esta chgando! O que você precisa saber
 
Otimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHPOtimizando a execução de código-fonte PHP
Otimizando a execução de código-fonte PHP
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Ligação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHPLigação do Flex a um backend LAMP usando AMFPHP
Ligação do Flex a um backend LAMP usando AMFPHP
 
2290494 integrando-flex-com-php
2290494 integrando-flex-com-php2290494 integrando-flex-com-php
2290494 integrando-flex-com-php
 
Plack
PlackPlack
Plack
 
NOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com pythonNOSQLBA 2018 - ArangoDB com python
NOSQLBA 2018 - ArangoDB com python
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
PHP para aplicações Web de grande porte
PHP para aplicações Web  de grande portePHP para aplicações Web  de grande porte
PHP para aplicações Web de grande porte
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
TDC2016POA | Trilha IoT - Controlando AR Drone com PHP
TDC2016POA | Trilha IoT -  Controlando AR Drone com PHPTDC2016POA | Trilha IoT -  Controlando AR Drone com PHP
TDC2016POA | Trilha IoT - Controlando AR Drone com PHP
 
Os 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTfulOs 7 Pecados Capitais na exposição de APIs RESTful
Os 7 Pecados Capitais na exposição de APIs RESTful
 
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017
Criptomoedas e .NET - Consumindo algumas APIs existentes - Julho-2017
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
PHP: Evolução
PHP: EvoluçãoPHP: Evolução
PHP: Evolução
 
Web Offline
Web OfflineWeb Offline
Web Offline
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7Tudo o que você precisa saber sobre o php7
Tudo o que você precisa saber sobre o php7
 
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e JavascriptCriando aplicativos para Windows 8 usando apenas HTML5 e Javascript
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
 

Mehr von Alex Piaz

Drupal e webservices: O caso do website das Unidades de Conservação
Drupal e webservices: O caso do website das Unidades de ConservaçãoDrupal e webservices: O caso do website das Unidades de Conservação
Drupal e webservices: O caso do website das Unidades de ConservaçãoAlex Piaz
 
Vários sites, um Drupal
Vários sites, um DrupalVários sites, um Drupal
Vários sites, um DrupalAlex Piaz
 
Utilizando a API do Foursquare com PHP
Utilizando a API do Foursquare com PHPUtilizando a API do Foursquare com PHP
Utilizando a API do Foursquare com PHPAlex Piaz
 
Utilizando a API do Live Messenger (MSN) com PHP
Utilizando a API do Live Messenger (MSN) com PHPUtilizando a API do Live Messenger (MSN) com PHP
Utilizando a API do Live Messenger (MSN) com PHPAlex Piaz
 
Desenvolvendo aplicações web para o Iphone
Desenvolvendo aplicações web para o IphoneDesenvolvendo aplicações web para o Iphone
Desenvolvendo aplicações web para o IphoneAlex Piaz
 
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Alex Piaz
 

Mehr von Alex Piaz (6)

Drupal e webservices: O caso do website das Unidades de Conservação
Drupal e webservices: O caso do website das Unidades de ConservaçãoDrupal e webservices: O caso do website das Unidades de Conservação
Drupal e webservices: O caso do website das Unidades de Conservação
 
Vários sites, um Drupal
Vários sites, um DrupalVários sites, um Drupal
Vários sites, um Drupal
 
Utilizando a API do Foursquare com PHP
Utilizando a API do Foursquare com PHPUtilizando a API do Foursquare com PHP
Utilizando a API do Foursquare com PHP
 
Utilizando a API do Live Messenger (MSN) com PHP
Utilizando a API do Live Messenger (MSN) com PHPUtilizando a API do Live Messenger (MSN) com PHP
Utilizando a API do Live Messenger (MSN) com PHP
 
Desenvolvendo aplicações web para o Iphone
Desenvolvendo aplicações web para o IphoneDesenvolvendo aplicações web para o Iphone
Desenvolvendo aplicações web para o Iphone
 
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
Fora Sobrinhos! Ecossistema para o desenvolvimento de aplicações corporativas...
 

ReSTFul Api's com FRAPI