PHP com Silex no Google App Engine Abordagem prática na criação de APIs com o micro framework Silex. Nanderson Castro Esselivroestáàvendaemhttp://leanpub.com/phpcomsilex-e-googleappengine Essaversãofoipublicadaem2017-09-14 EsseéumlivroLeanpub.ALeanpubdápoderesaosautoreseeditoresapartirdoprocessode PublicaçãoLean.PublicaçãoLeanéaaçãodepublicarumebookemdesenvolvimentocom ferramentaslevesemuitasiteraçõesparaconseguirfeedbacksdosleitores,pivotaratéquevocê tenhaolivroidealeentãoconseguirtração. ©2015-2017NandersonCastro Tweet Sobre Esse Livro! PorfavorajudeNandersonCastroadivulgaresselivronoTwitter! Ahashtagsugeridaparaesselivroé#phpcomsilexnoappengine. Descubraoqueasoutraspessoasestãofalandosobreesselivroclicandonesselinkparabuscara hashtagnoTwitter: #phpcomsilexnoappengine AgradeçoaDEUSpelaforçaconcedidaparacriaressematerial,agradeçoemespecialaminha esposapormeaguentaremminhacarreiraeemminhassaídasparaeventos.Agradeçotambém aosmeusamigosdacomunidadePHPMaranhão,comunidadeessaqueparticipoativamentee cresçobastanteacadadiaatravésdasinteraçõesexistentesnamesma.Agradeçominhafamiliapor sempreacreditareincentivaromeutrabalho.Porfim,agradeçoaminhabebê,éporelatambém quetenhoforçasparacontinuargerandoconteúdosedivulgandoconhecimento.Enfim,obrigadoa vocêleitor,porteradquiridoestee-book.Esperocontribuircomsuacarreiraprofissionalecomseu crescimento! Conteúdo Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Outrosprojetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 SilexCasts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 CodeExpertsLearning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ConhecendoeinstalandooSilex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Silex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Silex:HelloWorld! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 UmpoucomaissobreoSilex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Rotasdinâmicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Definindovaloresdefaultnasrotasdinâmicas . . . . . . . . . . . . . . . . . . . . . . . . 7 Middlewares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 MiddlewaresdeRota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 FalandoumpoucosobreServices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Providers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 APIEventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Nossoprojeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 NossaAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 PHPunit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Doctrine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 ConfigurandoNossoProjeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Estruturadepastas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Definindoeinstalandonossasdependências . . . . . . . . . . . . . . . . . . . . . . . . . 16 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 PHPunit101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 CONTEÚDO Introduçãoaostestes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 TDD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 OPHPUnit! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Doctrine101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 ConfigurandooDoctrineEmNossoProjeto . . . . . . . . . . . . . . . . . . . . . . . . . 23 ConfigurandoDoctrineCLI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Silex2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Atualizandoparaaversão2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 ControllerscomoServiço . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 OrganizandonossasrotasnoSilex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Nossaregradenegócio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Iniciando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 NossoTestCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 NossasEntidades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 UserService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 ImplementaçãodoUserService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 PasswordGenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ParticipanteEventos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 AlterandonossoUserService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 TestsemnossoEMService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 TrabalhandocomDoctrineRelationsEmNossoProjeto . . . . . . . . . . . . . . . . . . . 66 Antesdecomeçarmos… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Nossasalterações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 TestesFuncionaisdeNossasEntidadeseEMService . . . . . . . . . . . . . . . . . . . . . 69 TestesFuncionaisdoEMService . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 OArrayCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Concluindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 TestandoNossosControllers&Endpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 InstalandooGuzzle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 RevendonossoFunctionalTestCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Nossoendpoint/events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Nossoendpoint/users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Nossoendpoint/events/{event_id}/subscription . . . . . . . . . . . . . . . . . . . . . . . 92 ComoficounossoRoutereControllerService . . . . . . . . . . . . . . . . . . . . . . . . . 95 CONTEÚDO MeuControllerServiceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 MeuRouterServiceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Concluindo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 AutenticaçãocomJWT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 JWT(JsonWebTokens) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 PordentrodeumJSONWebToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 JWTemNossaAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 UtilizandoJWTnaNossaAPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Nossaautenticação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 AtualizandonossostestesdecriaçãoderecursosemnossaAPI . . . . . . . . . . . . . . . 112 Conclusões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 GoogleAppEngine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Introdução Olá,sejabem-vindoaonossoe-booksobreomicroframeworkSilex,nestee-bookabordaremostodo opoderdessemicroframeworkcriadoporFabienPotencier.OSilexéummicroframeworkbaseado nos componentes do Symfony e foi criado para ser focado em aplicações pequenas, extensíveis e facilmentetestáveis! Em nosso e-book abordaremos a utilização desse fw com prática do começo ao fim e vamos criar uma API de eventos como estudo de caso. Através dessa API pretendemos mostrar tudo o que o Silex nos disponibiliza para a criação de aplicações utilizando suas ferramentas. Veremos como ele pode ser facilmente estendido e utilizaremos testes em nossa API do começo ao fim, para torna-la maisconsistentepossível! Por fim conheceremos o Google App Engine, um dos produtos do Google Cloud Platform1. Nesta sessão abordaremos todo o processo de deploy de nossa API e durante esse deploy mostraremos os conceitosnecessáriossobreoGoogleCloudPlatformesobreoGoogleAppEngine. Embarque conosco nessa jornada! Esperamos que esse conhecimento possa te ajudar profissional- menteenãopouparemosesforçosparaofereceromelhordurantesualeitura!! 1https://cloud.google.com Outros projetos Olá,antesdeembarcarmosemnossoassuntoprincipal,gostariadeteapresentaralgunsprojetosque trabalhonodiadia! Silex Casts CanalfocadoemconteúdossobreomicroframeworkSilex,possuimosdiversasaulasemnossocanal sobreosmaisdiversosassuntossobreomesmo! • CanalnoYoutube:Ver2 Code Experts Learning Possuo também uma plataforma de cursos online, que começou a rodar desde Novembro de 2016. Convido você a dá uma olhadinha em nosso material ou até mesmo sugerir melhorias e também assuntos que poderão se tornar cursos futuramente! Temos também um canal no youtube da plataforma. • CanalnoYoutube:Ver3 • Site:Ver4 Obrigadoevamosaocentraldessee-book!NossaAPIcomSilex! Boaleitura! 2http://youtube.com/SilexCasts 3http://youtube.com/CodeExpertsLearning 4https://codeexpertslearning.com.br Conhecendo e instalando o Silex Silex OSilexéummicroframeworkbaseadonoscomponentesdoSymfonyefoifeitopelomesmocriador desteframework,FabienPotencier.OSilexfoiconcebidoparaacriaçãodeaplicaçõespequenascom foco na agilidade, extensibilidade e para ser facilmente testável. O Silex provê um sistema de rotas muito poderoso, inclusive rotas é a área que ele se propõe a resolver porém através dos Services e Providers,conceitosqueveremosmaisafrente,vocêperceberáqueeleéfacilmenteextendidoesuas funcionalidadesrecebemoplusatravésdessasintegrações. Instalação Para instalar o Silex em nossos projetos é muito simples, precisamos apenas do composer5 para gerenciar nossas dependências. Mas afinal o que é o composer?! O composer é um gerenciador de dependências para aplicaçõesPHP,eleé baseado nasGEMsdoRubyenoNPM doNode.JS.Com o composervocêpodefacilmentegerenciarainstalaçãodepacotesdeterceiros,bemcomoprepararo seupacoteparaqueelefiquedisponivelparaosdesenvolvedoresqueutilizamessaferramenta.Tudo queprecisaremosédeumarquivocomposer.jsonnaraizdenossoprojeto.Utilizaremosapi-events comonomedonossofolder. Naraizdessefoldercrieumarquivocomposer.jsoncomoseguinteconteúdo: 1 { 2 "require" : { 3 "silex/silex" : "^1.2" 4 } 5 } O composer.json é o arquivo que o Composer lê para poder realizar as tarefas de download e instalaçãodospacotes,aliespecificados,paravocê. Agora precisamos instalar o composer em nosso projeto. O composer pode ser utilizado de duas maneiras,deformalocaledeformaglobal,abordareiaquiaformalocal.Parainstalá-loemsistemas Unixlike,vocêprecisarádalibcurldisponível.SevocêutilizaoWindows,baixeoexecutávelaqui6. 5https://getcomposer.org 6https://getcomposer.org/Composer-Setup.exe
Description: