Está en la página 1de 18

20/5/2015

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
}
}

Ahora,agreguelafuncionalidadnecesariaparacada accin .Voyaofrecerel


cdigodela createAction mtodoylodejoaustedparacrearelcdigoparalos
otrosmtodos.Siustednoestdehumor,sinembargo,ustedpuededescargarel
cdigofuentedelademoycopiardesdeall.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15

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();
}

Crear TodoItem.php dentrodel modelos decarpetasparaquepodamoscrearel


cdigo"decreacindeobjetos".Tomenotadequenosevaaconectaraunabase
dedatos,msbien,voyaserelahorrodelainformacinenlosarchivos.Debera
serrelativamentefcil,sinembargoparaqueestofuncioneconcualquierbasede
datos.
01
02
03
04
05
06

<?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
);
}
}

El createAction mtodollamadosfuncionesenla TodoItem modelo:


save()estoahorrael TodoItem enunarchivo,ascomoestablecerel
todo_id parael TodoItem siesnecesario

toArray()estodevuelveunaversinmatrizdel TodoItem ,dondelas


variablessonndicesdelamatriz
DadoquelaAPIsellamaatravsdepeticionesHTTP,vamosaprobarquela
llamadaalaAPIllamandoatravsdelnavegador:
http://localhost/simpletodo_api/?
controller=todo&action=create&title=test%20title&description=test%20description&due_date=12/08/2011&username=nikko&userpass=test1234
Sitodofuncion,deberaverunanuevacarpetadentrodela datosde carpeta,y
dentrodeesacarpeta,deberaverunarchivoconelsiguientecontenido:

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"];
}
}

Usaremosla ApiCaller claseparaenviarpeticionesanuestroservidorAPI.De


estamanera,todoelcifradonecesarioycURLcdigodeinicializacinserenun
sololugar,ynotendrquerepetirnuestrocdigo.
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417

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);

Irala index.php pgina,registradocomoNikko/test1234,yusteddeberaverun


var_dump() deltemTODOhemoscreadoantes.

Felicidades,hanhechoconxitounallamadaalaAPIalservidordeAPI!Eneste
cdigo,tenemos:
iniciadolasesinporloquetenemosaccesoal nombredeusuario y
userpass en $_SESSION

instanciadounnuevo ApiCaller clase,dndoleel IDAPP , APPCLAVE yla


direccinURLdelservidordelaAPI
enviarunasolicitudatravsdela sendRequest() mtodo
Ahora,vamosaformatearlainformacinparaqueseveamejor.Agregueel
siguientecdigoHTMLenla todo.php cdigo.Noseolvidedequitarel var_dump
() !

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();
?>

Comosepuedever,el new_todo.php pginautilizael ApiCaller nuevopara


facilitarelenvodeltodo/crearsolicitudalservidorAPI.Estobsicamentehacelo
mismoqueantes:
iniciarunasesinporloquetieneaccesoal nombredeusuario$ y $
userpass guardadoenel $_SESSION

instanciarunnuevo ApiCaller clase,dndoleel IDAPP , APPCLAVE yla


direccinURLdelservidordelaAPI
enviarlasolicitudatravsdela sendRequest() mtodo
http://code.tutsplus.com/tutorials/creatinganapicentricwebapplicationnet23417

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

También podría gustarte