Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
OBTENERHOSTINGDE$3.95/MOPLUSUNAOGRATISENTUTS+(PVP180dlares).OFERTALIMITADAPRISA.
Cdigo
Categoras
GuasdeAprendizaje
Ayuda
Nuevo!
PHP
CreacindeunaaplicacinWeb
APICentric
porNikkoBautista
35
30dediciembre2011
15
38
159Comentarios
Planificacinparaempezaratrabajarenunanuevaaplicacinweb?Eneste
tutorial,vamosadiscutircmocrearunaaplicacinwebAPIcntrica,yexplicarpor
quesesencialenelmundomultiplataformadehoy.
Introduccin
API?
Paraaquellosquenoestnfamiliarizadosconeltrmino,laAPIeslaabreviaturade
Interfazdeprogramacindeaplicaciones.SegnWikipedia:
Unainterfazdeprogramacindeaplicaciones(API)es
unaespecificacinbasadacdigofuentedestinadoa
serutilizadocomounainterfazporcomponentesde
softwareparacomunicarseentres.UnaAPIpuede
incluirespecificacionespararutinas,estructurasde
datos,clasesdeobjetosyvariables.
APIdevisualizacin
Imagencortesadehttp://blog.zoho.com
Entrminosmssimples,unaAPIserefiereaunconjuntodefuncionesintegradas
enunaaplicacin,quepuedeserutilizadoporotrasaplicaciones(oporsmismo,
comoveremosmsadelante),parainteractuarconlaaplicacin.UnaAPIesuna
granmaneradeexponerlafuncionalidaddeunaaplicacinaaplicacionesexternas
conseguridadydeformasegura,yaquetodaslasfuncionesqueestasaplicaciones
externaspuedenhacereslimitadaconqufuncionalidadseexponeenelAPI.
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
1/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
QuesunaaplicacinWeb"APICentric"?
UnaaplicacinWebAPICentricesunaaplicacinweb
quebsicamenteejecutalamayora,sinoesas,toda
sufuncionalidadatravsdellamadasalaAPI.
UnaaplicacinWebAPICentricesunaaplicacinwebquebsicamenteejecuta
lamayora,sinoesas,todasufuncionalidadatravsdellamadasalaAPI.Por
ejemplo,siustedfueraaentraraunusuario,leenvasuscredencialesalaAPI,yla
APIlevolveravosotrosresultadodiciendoquesielusuarioproporcionala
combinacindeusuariocontraseacorrecta.
OtracaractersticadeunaaplicacinWebAPICentricesquelaAPIsersiempre
sinestado,loquesignificaquenopuedereconocerlasllamadasdelaAPIpor
sesin.DesdellamadasalaAPIseharnporlogeneralatravsdelcdigode
fondo,queserdifcildeimplementarelmanejodesesiones,yaquenormalmente
nohaygalletasinvolucradoseneso.Estalimitacinesrealmentebuenoesta
"fuerza"aundesarrolladorparaconstruirunaAPIquenofuncionabasadoenel
estadodelusuarioactual,sinomsbienenlafuncionalidad,queasuvez,haceque
seamsfcildeprobar,yaqueelestadoactualdeunusuarionoesnecesario
volveracrear.
Porqupasarportodoesteproblema?
Comodesarrolladoresweb,quehemosvistoevolucionarlatecnologadeprimera
mano.Esdeconocimientocomnquelagentehoyendanosloseusan
aplicacionesatravsdeunnavegador,sinoatravsdeotrosdispositivos,comolos
telfonosmvilesytabletas.Porejemplo,esteartculoenMashable,titulado"Los
consumidoresahorapasarmstiempoenaplicacionesmvilesquelaWeb",
afirma:
Losconsumidoresestngastandomstiempoen
aplicacionesmvilesqueenlawebporprimeravez,un
nuevoinformeafirma.
Flurrycomparsusdatosmvilesalasestadsticasde
comScoreyAlexa,yencontrqueenjunio,los
consumidoresgastaron81minutospordautilizando
aplicacionesmviles,encomparacincon74minutos
denavegacinenlaweb.
HeaquunrecienteartculomsdeReadWriteWeb,titulado"MsgenteExaminar
OnMobilequeelusodeIE6yIE7Combinada:
Losltimosdatossobrelastendenciasdelnavegador
deSitepointmuestranquemspersonasnaveganpor
laWebenlostelfonosinteligentesqueutilizanInternet
Explorer6y7combinadas.Esosdoscacharrosviejos
hansidolosespantajosdelosdesarrolladoresweb
duranteaos,loquerequieresitiosdedegradartan
biencomoseaposibleparaqueeldenominadormenos
comndelosnavegadores.Peroesunmundonuevo
ahora6.95%delaactividadwebennoviembrede
2011estabaenlosnavegadoresmviles,yslo6,49%
estabaenIE6o7.
Comopodemosverclaramente,msymspersonasobtienensusnoticiasde
espaciosalternativos,dispositivosespecficamentemviles.
Qutieneestoqueverconmigolacreacindeuna
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
2/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
aplicacinWebAPICentric?
Estoconducirainevitablementeaunmayorusode
nuestraaplicacin,yaquesepuedeutilizaren
cualquierlugarqueunapersonaquiere.
UnadelasprincipalesventajasdecrearunaaplicacinAPIcntricaesqueayudaa
construirlafuncionalidadquepuedeserutilizadoporcualquierdispositivo,yasea
unnavegador,untelfonomvil,unatableta,oinclusounaaplicacindeescritorio.
TodoloquenecesitashacerescrearlaAPIdetalmaneraquetodosestos
dispositivossepuedencomunicarconella,yvoil!Ustedhaconstruidouna
aplicacincentralizadaquepuedetomarlaentradayejecutarlafuncionalidadde
cualquierdispositivoqueunapersonatiene!
APICentricDiagramadeaplicacin
Mediantelacreacindeunaaplicacindeestamanera,somoscapacesdetomar
ventajadelosdiferentesmediosutilizadospordiferentespersonas.Estoconducira
inevitablementeaunmayorusodeunaaplicacin,yaquesepuedeutilizaren
cualquierlugarqueunapersonaquiere.
Pararemacharelclavo,aquestunartculoacercadelanuevapginaweb
rediseadadeTwitter,quenoshabladelaformaenqueahorautilizansuAPIpara
alimentarTwitter.com,esencialmente,porloqueesAPIcntrico:
Unodelosmsimportantescambiosenlaarquitectura
esqueTwitter.comesahoraunclientedenuestra
propiaAPI.Seobtienedatosdelosmismoscriteriosde
valoracinqueelsitiomvil,nuestrasaplicacionespara
iPhone,iPad,Android,ycadausodeaplicacionesde
terceros.Estecambionospermitiasignarms
recursosalequipodeAPI,generandomsde40
parches.Enlacargadelapginainicialycadallamada
desdeelcliente,todoslosdatossonahoraobtienende
unacachfragmentoJSONaltamenteoptimizado.
Enestetutorial,vamosaestarcreandounaaplicacindelalistaTODOsimpleque
esAPICentricycrearunclientefrontendenelnavegadorqueinteractacon
nuestraaplicacinlistaTODO.Alfinal,ustedsabrlaspartesintegrantesdeuna
aplicacinAPICentric,yalmismotiempo,laformadefacilitarlacomunicacin
seguraentrelosdos.Conestoenmente,vamosaempezar!
Paso1:Planifiquefuncionesdelaaplicacin
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
3/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
LaaplicacinTODOestaremosconstruyendoenestetutorialtendrlasfunciones
bsicasCRUD:
CrearTODOArtculos
LeerTODOArtculos
ActualizacinArtculosTODO(renombrar,marcarcomohecho,marcarcomo
deshecho)
EliminarTODOArtculos
CadatemTODOtendr:
unTtulo
unaFechadevencimiento
unadescripcin
unabanderaparadecirsielTODOartculoIsDone
Vamosmaquetadelaaplicacin,asquetenemosunaguasobrelaforma
quedebesersimilardespus:
SimpleTODOMaqueta
Paso2:CrearelservidorAPI
YaqueestamosdesarrollandounaaplicacinAPICentric,estaremoscreando
dos"proyectos":elservidorAPI,yelclientefrontend.Vamosacomenzar
conlacreacindelservidorAPIprimera.
Enlacarpetadesuservidorweb,creeunacarpetaconelnombre
simpletodo_api ,ycrearun index.php archivo.Esta index.php archivo
actuarcomouncontroladorfrontalparalaAPI,asquetodaslaspeticiones
alservidordelaAPIserrealizadaatravsdeestearchivo.breloyponerel
siguientecdigodentrode:
01
02
03
04
05
06
<?Php
//Definirrutadeaccesoalacarpetadedatos
define('DATA_PATH',realpath(dirname(__FILE__).'/data'));
//Incluirnuestrosmodelos
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
4/18
20/5/2015
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
include_once'modelos/TodoItem.php';
//Envolvertodoenunbloquetrycatchparacapturarcualquierexcepcindescarriados!
tratar{
//ObtenertodoslosparmetrosenelPOST/GETsolicitud
$Params=$_REQUEST;
//Obtenerelcontroladoryformatearcorrectamenteporloqueelprimero
//Cartaessiemprecapitalizado
Controlador$=ucfirst(strtolower($params['controlador']));
//Obtenerlaaccinyformatearlocorrectamenteparatodoslos
//cartasnosecapitalizan,yanexar'Accin'
$Action=strtolower($params['action']).'Accin';
//Comprobarsiexisteelcontrolador.sino,unaexcepcin
si(file_exists("controladores/{}$controlador.php")){
include_once"controladores/{}$controlador.php";
}otro{
arrojarnuevaExcepcin('Controllernoesvlido.');
}
//Crearunanuevainstanciadelcontrolador,ypase
//Quelosparmetrosdelapeticin
Controlador$=nuevocontroladorde$($params);
//Comprobarsiexistelaaccinenelcontrolador.sino,unaexcepcin.
si(method_exists(controlador$,$action)===false){
arrojarnuevaExcepcin("Accinnoesvlido.');
}
//Ejecutarlaaccin
$Resultado["datos"]=$controlador>$action();
$Resultado['xito']=true;
}catch(Exception$e){
//Atraparexcepcionesyreportarelproblema
$Resultado=array();
$Resultado['xito']=false;
$Resultado['errormsg']=$e>getMessage();
}
//EchoelresultadodelallamadaalaAPI
ecojson_encode($resultado);
exit();
Loqueesencialmentehemosconstruidoaquesuncontroladorfrontalsimpleque
hacelosiguiente:
AceptarunallamadaalaAPIconcualquiernmerodeparmetros
Extraigael Controlador y Accin paralallamadaalaAPI
Hagaloscontrolesnecesariosparagarantizarqueel controlador y Accin
existen
EjecutelallamadaalaAPI
Erroresdecaptura,ensucaso
Enviarnuevounresultadoalapersonaquellama
Ademsdela index.php archivo,creartrescarpetas:aloscontroladores,los
modelosylosdatosdelacarpeta.
Elcontroladorescarpetacontendrtodosloscontroladoresquevaautilizar
paraelservidorAPI.EstaremosconstruirloutilizandolaarquitecturaMVCpara
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
5/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
hacerlaestructuradelfiltrodeservidordelaAPIymsorganizado.
Lamodeloscarpetacontendrtodoslosmodelosdedatosparaelservidor
API.
LadatosdecarpetaserdondeelservidorAPIguardalosdatos
Iralacarpetadeloscontroladoresycrearunarchivollamado Todo.php .Esteser
nuestrocontroladorparacualquiertareadelalistaTODOrelacionados.Conlas
funcionesquevamosanecesitarparanuestraaplicacinTODOencuenta,creelos
mtodosnecesariosparaelcontroladordeTodo:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?Php
claseTodo
{
privadas$_params;
pblicafuncin__construct($params)
{
$This>_params=$params;
}
pblicafuncincreateAction()
{
//CrearunnuevoelementoTODO
}
pblicafuncinreadAction()
{
//Leertodosloselementosdetareaspendientes
}
pblicafuncinupdateAction()
{
//ActualizarunartculoTODO
}
pblicafuncinDeleteAction()
{
//EliminarunelementoTODO
}
}
pblicafuncincreateAction()
{
//CrearunnuevoelementoTODO
$TODO=nuevaTodoItem();
$TODO>title=$this>_params['title'];
$TODO>Descripcin=$this>_params['description'];
$TODO>due_date=$this>_params['due_date'];
$TODO>is_done="false";
//Pasarnombredeusuarioylacontraseadelusuarioparaautenticaralusuario
$TODO>save($this>_params['nombredeusuario'],$this
//DevuelveelelementoTODOenformatodematriz
retorno$TODO>toArray();
}
<?Php
claseTodoItem
{
pblica$todo_id;
pblica$title;
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
6/18
20/5/2015
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
pblica$Descripcin;
pblica$due_date;
pblica$is_done;
pblicafuncinsave($usuario,$userpass)
{
//Obtenerelnombredeusuario/contraseadehash
$Userhash=sha1("{$username}_{}$userpass");
si(is_dir(DATA_PATH."/{$userhash}")===false){
mkdir(DATA_PATH."/{$userhash}");
}
//Silos$todo_idnoestanestablecido,significaquetenemosquecrearunnuevoelementoTODO
si(is_null($this>todo_id)||is_numeric($this>todo_id)){
//ElidTODOeslahoraactual
$This>todo_id=time();
}
//ObtenerlaversindeseriedeesteartculoTODO
$Todo_item_array=$this>toArray();
//Guardarlaversinserieserializadoenunarchivo
$xito=file_put_contents(.DATA_PATH"/{$userhash}/{$this>todo_id}.txt"
//Sielahorronotuvoxito,unaexcepcin
si($xito===false){
arrojarnuevaExcepcin("ErroralguardarTODOtema');
}
//Devuelvelaversindeserie
devolver$todo_item_array;
}
pblicafuncintoArray()
{
//DevuelveunaversinmatrizdelelementoTODO
volvermatriz(
'Todo_id'=>$this>todo_id,
'Ttulo'=>$this>ttulo,
'Description'=>$this>descripcin,
'Due_date'=>$this>due_date,
'Is_done'=>$this>is_done
);
}
}
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
7/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
createAction() resultado
Enhorabuena!UstedhacreadoconxitounservidorAPIehizounallamadaala
API!
Paso3:AsegureelservidorAPIconun IDAPP y
APPSECRETO
Actualmente,elservidorAPIestconfiguradoparaaceptarTODASlassolicitudes
delAPI.Tendremosquelimitarloaslonuestraspropiasaplicaciones,para
garantizarqueslonuestrospropiosclientesfrontendsoncapacesdehacerlas
solicitudesdelAPI.Alternativamente,ustedpuedecrearunsistemaenelquelos
usuariospuedencrearsuspropiasaplicacionesquetienenaccesoasuservidor
API,similaralaformaenFacebookyaplicacionesdeTwitterfuncionan.
Comienceporlacreacindeunconjuntodeparesidclaveparalosclientesque
vayanautilizarelservidorAPI.Dadoqueestaesslounademo,podemosusar
cualquier,32seriedecaracteresaleatorios.Parala APPID ,digamosqueesla
aplicacinAPP001.
Abraelindex.phparchivodenuevo,yluegoactualizarloconelsiguientecdigo:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?Php
//Definirrutadeaccesoalacarpetadedatos
define('DATA_PATH',realpath(dirname(__FILE__).'/data'));
//Definirnuestrosparesclaveid
$aplicaciones=array(
'APP001'=>'28e336ac6c9423d946ba02d19c6a2632',claveaplicacin//generaaleatoriamente
);
//Incluirnuestrosmodelos
include_once'modelos/TodoItem.php';
//Envolvertodoenunbloquetrycatchparacapturarcualquierexcepcindescarriados!
tratar{
//*ACTUALIZADO*
//Obtenerlasolicitudcifrada
$Enc_request=$_REQUEST['enc_request'];
//ObtenerelproporcionadoIdentificacinaplicacin
$App_id=$_REQUEST['app_id'];
//ComprobarprimerosiexisteelIDdeaplicacinenlalistadeaplicaciones
si(isset!(aplicaciones$[$app_id])){
arrojarnuevaExcepcin("Aplicacinnoexiste!');
}
//Descifrarlasolicitud
$Params=MCRYPT_MODE_ECB)));
//Comprobarsilasolicitudesvlidacomprobandosisetratadeunamatrizybuscarelcontroladoryaccin
si(params$==issetfalsa||(params$>Controlador)==false||isset(
arrojarnuevaExcepcin('Requestnoesvlido");
}
//Echarloenunamatriz
$Params=(array)$params;
...
...
...
Loquehemoshechoaquesrealmenteponerenprcticaunaformamuysencilla
deautenticarclientesfrontendutilizandounsistemasimilaralaautenticacinde
clavepblicaprivada.Bsicamente,aquesteldesglosepasoapasodecmo
sucedelaautenticacin:
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
8/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
Cifradodeclavepblica
unallamadaalaAPIsehace,enellaun$app_idy$enc_requestse
proporciona.
el$enc_requestvaloreslosparmetrosdellamadaAPI,ciframediante APP
CLAVE .La APPCLAVE seNUNCAenvaalservidor,sloseusaparadiscutir
lasolicitud.Adems,lasolicitudslopuedeserdescifradousandola CLAVE
APP .
unavezquelallamadaalaAPIllegaalservidorAPI,comprobarsupropia
listadeaplicacionesparael IDdeaplicacin previstos
cuandoseencuentran,elintentodelservidorAPIparadescifrarlasolicitud
utilizandolaclavequecoincideconel IDAPP enviado
situvoxitoendescifrarlo,yluegocontinuarconelprograma
AhoraqueelservidordelaAPIseaseguraconun IDAPP y APPSECRETO ,
podemosempezaraprogramarunclientefrontendparautilizarelservidorAPI.
Anuncio
Paso4:CrearelclienteBrowserFrontend
Comenzaremoscreandounanuevacarpetaparaelclientefrontend.Crearuna
carpetallamada simpletodo_client_browser enlacarpetadesuservidorweb.
Cuandosehaceeso,crearunaindex.phparchivoyponerestecdigoenelinterior:
01
02
03
04
05
06
07
08
<!DOCTYPEhtml>
<html>
<cabeza>
<ttulo>SimpleTODO</titulo>
<enlacerel="stylesheet"href="css/reset.css"tipo="text/css"
<enlacerel="stylesheet"href="css/bootstrap.min.css"tipo
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
9/18
20/5/2015
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
<guinsrc="js/jquery.min.js"></scriptde>
<guinsrc="js/jqueryui1.8.16.custom.min.js"></scriptde
<estilo>
body{
paddingtop:40px;
}
#main{
margintop:80px;
textalign:center;
}
</estilo>
</cabeza>
<cuerpo>
<divclase="topbar">
<divclase="llenar">
<divclase="contenedor">
<unaclase="marca"href="index.php">SimpleTODO</
</div>
</div>
</div>
<divIdentificacin="principal"clase="contenedor">
<formadeclase="formaapilada"mtodo="POST"accin="login.php"
<divclase="row">
<divclase="offset5span5">
<labelpara="login_username">Nombredeusuario:</
<inputtipo="text"Identificacin="login_username"
<labelpara="login_password">Contrasea:</label
<inputtipo="password"Identificacin="login_password"
</div>
</div>
<divclase="acciones">
<botndetipo="submit"nombre="login_submit"clase
</div>
</forma>
</div>
</cuerpo>
</html>
Esodeberaseralgocomoesto:
SimpleTODOpginadeentrada
Tomenotadequeheincluido2archivosJavaScriptyCSS2archivosaqu:
reset.csseslasecuenciadecomandosderestablecimientoCSSestndar.Yo
usoelrestablecimientocssmeyerweb.com.
bootstrap.min.csseselTwitterBootstrap
jquery.min.jseslaltimalibrerajQuery
jqueryui8.1.16.custom.min.jseslaltimalibrerajQueryUI
Acontinuacin,vamosacrearel login.php archivodemodoquealmacenamosel
nombredeusuarioycontraseadentrodeunasesinenelcliente.
01
02
03
04
05
06
07
08
09
10
<?Php
//Obtenerlosvaloresdelformulario
$Nombre_usuario=$_POST['login_username'];
$Userpass=$_POST['login_password'];
session_start();
$_SESSION['nombredeusuario']=$nombredeusuario;
$_SESSION['userpass']=$userpass;
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
10/18
20/5/2015
11
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
header("Location:todo.php');
exit();
Aqu,simplementeempezamosunasesinparaelusuario,basadoenla
combinacindenombredeusuarioylacontraseaqueelusuariovaadar.Esto
actacomounallavedecombinacinsencilla,loquepermitiralusuarioaccedera
elementosTODOalmacenadosparaunacombinacinespecficadetantoelnombre
deusuarioycontrasea.Acontinuacin,redirigimosa todo.php ,donde
empezamoslainteraccinconelservidordelaAPI.Antesdeempezaracodificarel
todo.php archivoembargo,primerovamosacrearunApiCallerclase,que
encapsulartodoslosmtodosdelaAPIllamandoquenecesitaremos,incluyendola
encriptacindelassolicitudes.
Crear apicaller.php yponerlosiguienteenelinterior:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?Php
claseApiCaller
{
//Algunasvariablesparaelobjeto
privada$_app_id;
privada$_app_key;
privada$_api_url;
//ConstruirunobjetoApiCaller,teniendoun
//APPID,APPCLAVEyelparmetroURLAPI
pblicafuncin__construct($app_id,$app_key,$api_url)
{
$This>_app_id=$app_id;
$This>_app_key=$app_key;
$This>_api_url=$api_url;
}
//EnviarlasolicitudalservidordelaAPI
//Tambincifralasolicitud,acontinuacin,cheques
//Silosresultadossonvlidos
pblicafuncinsendRequest($request_params)
{
//Encriptarlosparmetrosdelapeticin
$Enc_request=base64_encode(MCRYPT_ENCRYPT(MCRYPT_RIJNDAEL_256,
//Crearelarrayparams,quelohar
//SerlosparmetrosPOST
$Params=array();
$params['enc_request']=$enc_request;
$params['app_id']=$this>_app_id;
//Inicializaryconfigurarelcontroladorderizo
$Ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$this>_api_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,contar($params));
curl_setopt($ch,CURLOPT_POSTFIELDS,$params);
//Ejecutarlasolicitud
$Resultado=curl_exec($ch);
//Json_decodeelresultado
$Resultado=json_decode($resultado);
//Comprobarsisomoscapacesdejson_decodeelresultadocorrectamente
si($result==falseisset||($resultado['xito'])==false){
arrojarnuevaExcepcin("Solicitudnoeracorrecto');
}
//Sihubounerrorenlasolicitud,unaexcepcin
si($resultado["xito"]==false){
arrojarnuevaExcepcin($resultado['errormsg']);
}
//Sitodohaidomuybien,devolverlosdatos
devolver$resultado["datos"];
}
}
11/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
el __construct funcintomatresparmetros:
1. $App_idel IDAPP paraelcliente(queesAPP001paraelclientedel
navegador)
2. $App_keyla CLAVEAPP paraelcliente(quees
28e336ac6c9423d946ba02d19c6a2632paraelclientedelnavegador)
3. $Api_urlladireccinURLdelservidordelaAPI,quees http://
localhost/simpletodo_api/
el ()sendRequest funcin:
1. encriptalosparmetrosdelapeticinutilizandoel mcrypt bibliotecade
lamismaformaqueelservidorAPIdescifra
2. generael _POST$ parmetrosaserenviadosalservidorAPI
3. ejecutalallamadaalaAPIatravsdeCURL
4. compruebaelresultadodelallamadaalaAPIseharealizado
correctamenteono
5. devuelvelosdatoscuandotodosalisegnloplaneado
Ahora,vamosaempezarconel todo.php pgina.Enprimerlugar,vamosacrear
algodecdigopararecuperarlalistadetareaspendientesactualdeartculospara
elusuario Nikko conlacontrasea test1234 (estaeslacombinacinusuario/
contraseaqueusamosantesparaprobarelservidorAPI).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?Php
session_start();
include_once'apicaller.php';
$apicaller=newApiCaller('APP001','28e336ac6c9423d946ba02d19c6a2632'
$Todo_items=$apicaller>sendRequest(array(
'Controlador'=>'todo',
'Accin'=>'leer',
'Nombredeusuario'=>$_SESSION['nombredeusuario'],
'Userpass'=>$_SESSION['userpass']
));
echo'';
var_dump($todo_items);
Felicidades,hanhechoconxitounallamadaalaAPIalservidordeAPI!Eneste
cdigo,tenemos:
iniciadolasesinporloquetenemosaccesoal nombredeusuario y
userpass en $_SESSION
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
12/18
20/5/2015
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
<!DOCTYPEhtml>
<html>
<cabeza>
<ttulo>SimpleTODO</titulo>
<enlacerel="stylesheet"href="css/reset.css"tipo="text/css"
<enlacerel="stylesheet"href="css/bootstrap.min.css"tipo
<enlacerel="stylesheet"href="css/pelcula/jqueryui1.8.16.custom.css"
<guinsrc="js/jquery.min.js"></scriptde>
<guinsrc="js/jqueryui1.8.16.custom.min.js"></scriptde
<estilo>
body{
paddingtop:40px;
}
#main{
margintop:80px;
}
.textalignright{
textalign:right;
}
.marginbottom10{
marginbottom:10px;
}
#newtodo_window{
textalign:left;
display:none;
}
</estilo>
<scriptde>
$(Document).ready(function(){
$("#Todolist").Acorden({
plegable:true
});
$(".Datepicker")datepicker(.);
$('#Newtodo_window').Dedilogo({
AutoOpen:false,
Altura:'auto',
width:'auto',
modal:true
});
$('#Newtodo').Click(function(){
$('#Newtodo_window')dedilogo("abierta").;
});
});
</scriptde>
</cabeza>
<cuerpo>
<divclase="topbar">
<divclase="llenar">
<divclase="contenedor">
<unaclase="marca"href="index.php">SimpleTODO</
</div>
</div>
</div>
<divIdentificacin="principal"clase="contenedor">
<divclase="marginbottom10textalignright">
<lapsoIdentificacin="newtodo"clase="btninfo">CrearunnuevoelementoTODO</
<divIdentificacin="newtodo_window"ttulo="CrearunnuevoelementoTODO"
<formulariomtodo="POST"accin="new_todo.php"
<p>Ttulo:<br/><inputtipo="text"clase
<p>Fechadevencimiento:<br/><inputtipo
<p>Descripcin:<br/><textareaclase="description"
<divclase="acciones">
<inputtipo="submit"valor="Crear"nombre
</div>
</forma>
</div>
</div>
<divIdentificacin="todolist">
<?phpforeach($todo_itemscomo$TODO):?>
<h3><ahref="#"><?phpecho$ttulotodo>;?></
<div>
<formulariomtodo="POST"accin="update_todo.php"
<divclase="textalignright">
<ahref="delete_todo.phptodo_id=<?phpecho$todo>todo_id;???>">Eliminar</
</div>
<div>
<p>Fechadevencimiento:<br/><inputtipo
<p:>Descripcin<br</>readetextodeclase
</div>
<divclase="textalignright">
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
13/18
20/5/2015
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
<?phpif($todo>is_done=='falsa'):?>
<inputtipo="oculto"valor="false"nombre=
<inputtipo="submit"clase="btn"valor="Marcarcomohacer?"
<?phpcosa:?>
<inputtipo="oculto"valor="true"nombre=
<inputtipo="button"clase="btnxito"valor
<?phpendif;?>
<inputtipo="hidden"value="<?phpecho$todo>todo_id;?>"name="todo_id"/>
<inputtipo="hidden"value="<?phpecho$todo>ttulo;?>"name="title"/>
<inputtipo="submit"clase="primariabtn"valor
</div>
</forma>
</div>
<?phpendforeach;?>
</div>
</div>
</cuerpo>
</html>
Ahoradeberaseralgocomoesto:
Bastantebieneh?Peroestemomento,nohacenada,asquevamosaempezara
aadiralgunasfunciones.Voyaofrecerelcdigopara new_todo.php ,quellamar
al todo/crear llamadaalaAPIparacrearunnuevoelementodeTODO.La
creacindelasotraspginas( update_todo.php y delete_todo.php )debeser
muysimilaraste,asquevoyadejaraustedparacrearesos.Abre new_todo.php
yagregueelsiguientecdigo:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
<?Php
session_start();
include_once'apicaller.php';
$apicaller=newApiCaller('APP001','28e336ac6c9423d946ba02d19c6a2632'
$NEW_ITEM=$apicaller>sendRequest(array(
'Controlador'=>'todo',
'Accin'=>'crear',
'Ttulo'=>$_POST['title'],
'Due_date'=>$_POST['due_date'],
'Description'=>$_POST['description'],
'Nombredeusuario'=>$_SESSION['nombredeusuario'],
'Userpass'=>$_SESSION['userpass']
));
header("Location:todo.php');
exit();
?>
14/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
redirigirdenuevoa todo.php
Felicidades,funciona!UstedhacreadoconxitounaaplicacinAPIcntrica!
Conclusin
Haytantasventajasparaeldesarrollodeunaaplicacinqueseconstruyealrededor
deunaAPI.QuierescrearunaversindelaaplicacinAndroiddeSimpleTODO?
TodalafuncionalidadquesenecesitayaestenelservidorAPI,porloquetodolo
quetienequehacerescrearelcliente!Quieresrefactorizaruoptimizaralgunasde
lasclases?Nohayproblemasloasegresedequelasalidaeslamisma.
Necesidaddeaadirmsfuncionalidad?Puedeshacerlowihtoutafectaraninguna
decdigosdelcliente!
Aunquehayalgunasdesventajas,comolostiemposdedesarrollomslargosoms
complejidad,lasventajasdedesarrollarunaaplicacinwebdeestamanera
outweightengranmedidalasdesventajas.Tododependedenosotrospara
aprovecharenestetipodedesarrollohoyparaquepodamoscosecharlos
beneficiosmsadelante.
EstpensandoenutilizarunservidorAPIparalaaplicacinWebsiguiente,oya
usadolamismatcnicaparaunproyectoenelpasado?Hzmelosaberenlos
comentarios!
Anuncio
Dificultad:
Intermedio
Longitud:
Largo
Categoras:
PHP
DesarrolloWeb
Traducciones:
Tuts+tutorialessontraducidosaotrosidiomaspornuestrosmiembrosdelacomunidadpuedeparticipartambin!
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
15/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
Traduciresteartculo
Descargararchivoadjunto
AcercadeNikkoBautista
EstoyNikkoBautista.Duranteelda,yotrabajocomoingenierodesoftwareenBright.com,donderealizamoslacontratacinmsinteligente,msrpidoyms
barato.Porlanoche,desarrollodeaplicacioneswebyescribirtutorialesparaTuts+.NacycrecenlaPerladeOriente,Filipinas.En2012,metrasladalotrolado
delmundoyterminenelcorazndelcentrodeSanFrancisco,dondelaculturaylaenergasonincomparables.Es,sinlugaradudas,elmejorlugarparaser
ingeniero.MeespecializoenlosmarcosdePHPyPHP.TengoexperienciaconSymfony,ZendFramework,CodeIgniter,FuelPHPylaravel.MegustacrearymantenerAPIs
paradesarrolladoresdeusar.TambintengoexperienciaenAPIsdetercerosdeFacebook,Twitter,Googleyotrasplataformas.Amenudomeexploronuevastecnologas,
losmarcosylosservicioswebmediantelaconstruccindeaplicacioneswebquelasutilizan.Tuts+mepermitecompartirloqueheaprendidoconelmundo.Enmitiempo
libre,meencantaaprenderyleeracercadelasnuevastecnologas,lasinnovacionesylaweb.Tambinmegustaprobarnuevosrestaurantes,probarprobarwhiskies,dar
+AmpliarBio
Anuncio
Tutssugeridos+Curso
AvanzadaPOOEnPHPconlaspruebasde
15dlares
TutorialesRelacionados
Elusodelaravel5AutenticacinFachada
Cdigo
ConstruccindesuinicioconPHP:Planificacindeunareunin
Cdigo
CrearunPluginLicenciacontroladaytemticodeactualizacindelsistema,Parte3:Hacerlaactualizacin
Cdigo
Empleos
DesarrolladordeWordPress(remoto)
enSouthBendDiseoenSanFrancisco,CA,EE.UU.
VisualDiseoInstructor
enTuts+ennulo
EnvatoMercadoartculo
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
16/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
Disquspareceestartomandomstiempodelohabitual.Recargar?
Anuncio
Laenseanzadehabilidadesamillonesentodoelmundo.
19652 Tutoriales
535 CursosdeVideo
Sguenos
Ayudayapoyo
PF
Condicionesdeuso
Comunqueseconelsoporte
AcercaTuts+
Anunciar
EnseeaTuts+
TraducirparaTuts+
Meetup
Boletinesdecorreoelectrnico
ObtnTuts+actualizaciones,noticias,
encuestasyofertas.
EmailAddress
Suscribir
PolticaDePrivacidad
Serviciosdeencargodigitalescomodiseodelogotipos,instalacindeWordPress,produccindevdeoymuchoms.
MiraEnvatoEstudio
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
17/18
20/5/2015
CreacindeunaaplicacinWebAPICentricTuts+CdigoTutorial
Construyecualquiercosa,desdelasredessocialesparapresentarlossistemasdecarga.ConstruirmsrpidoconscriptsPHP
precodificadas.
NavegarPHPenCodeCanyon
2015EnvatoPtyLtd.Marcascomercialesymarcassonpropiedaddesusrespectivosdueos.
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417
18/18