Aplicação Web Zend Framework 2 Cliente de Aplicação Asp.Net Web API 1. Criar a Aplicação Asp.Net Web API 2 com Individual User Accounts Visual Studio 2015 > File > New > Project Visual C#, Web > ASP.NET Web Application (.NET Framework) Name: WebApiMusicas ASP.NET 4.6 Templates: Web API Authentication: Individual User Accounts OK 1.1. Adicionar a classe Musica Models > botão direito do rato: Add > Class > Name: Musica.cs Add public class Musica public int MusicaId get; set; public string Artista get; set; public string Titulo get; set; 1.2. Build da Aplicação Necessário para em seguida o scaffolding poder usar as classes do modelo e do contexto. Build > Build Solution 1.3. Scaffolding para criar Controlador para a entidade Musica Controllers > botão direito do rato: Add > Controller > Add Scaffold: Web API 2 Controller with actions, using Entity Framework > Add Model class: Musica (WebApiMusicas.Models) Data context class: ApplicationDbContext (WebApiMusicas.Models) Use async controller actions Controller name: Add MusicasController 1.4. Verificar a criação do objeto DbSet para acesso à base de dados (na classe ApplicationDbContext) No ficheiro Models\IdentityModels.cs aparece a propriedade DbSet: Musicas. public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
public ApplicationDbContext() : base("defaultconnection", throwifv1schema: false) public static ApplicationDbContext Create() return new ApplicationDbContext(); public System.Data.Entity.DbSet<WebApiMusicas.Models.Musica> Musicas get; set; 1.5. Executar a aplicação e criar objetos com o Postman Debug > Start Without Debugging Na barra de endereços do browser acrescentar /api/musicas Postman http://localhost: 10120/api/Musicas method POST 1.6. Configurar autorização do acesso ao recurso Musica apenas a utilizadores autenticados namespace WebApiMusicas.Controllers [Authorize] public class MusicasController : ApiController...
1.7. Configurar uma ligação segura para esta aplicação Asp.Net Web API 2 Ativar SSL no IIS Express a partir do Visual Studio 2015: Janela de propriedades do projeto (Selecionar projeto > F4) Mudar SSL Enabled para True Guardar o URL SSL para depois testar as ligações HTTPS https://localhost:44343/ Página de propriedades Web para configurar URL seguro no IIS Express local Bt dir. Do rato em cima do nome do projeto > Properties Web > Project URL http://localhost:10120/ Mudar para https://localhost:44343/ Premir Create Virtual Directory The virtual directory was created successfully A página fica marcada com asterisco: Web* > Gravar esta página (Ctrl + S) 1.8. Registar um utilizador A aplicação é agora acessível por https mas também continua acessível por http. http://localhost: 10120/api/Account/Register method POST x-www-form-urlencoded Email a@a.pt Password Qwerty1! ConfirmPassword Qwerty1!
2. Criar a Aplicação Zend Framework 2 (Cliente da Aplicação Web API 2) 2.1. Criação de um Serviço de Login na aplicação ZF2 Albuns criada neste link Módulo Album da aplicação ZF2 Albuns module/album/src /Album > New > Folder Folder name: Services Criação da classe Credenciais para conter as credenciais de acesso à aplicação Asp.Net Web API 2 Services > New > Class Class Name: Credenciais Finish namespace Album\Services; class Credenciais public static $username = "a@a.pt"; public static $password = "Qwerty1!"; Criação da classe EnderecoWebApi para conter o endereço base da aplicação Asp.Net Web API 2 Services > New > Class Class Name: EnderecoWebApi Finish namespace Album\Services; class EnderecoWebApi public static $enderecobase = 'https://localhost:44343'; Criação da classe WebApiServices com o serviço de Login, Logout, e getmusicas Services > New > Class Class Name: WebApiServices Finish namespace Album\Services; use Zend\Http\Client; use Zend\Http\Request; use Zend\Json\Json;
class WebApiServices public static function Login() $username = Credenciais::$username; $password = Credenciais::$password; $enderecobase = EnderecoWebApi::$enderecoBase; $client = new Client($enderecoBase. '/Token'); $client->setmethod(request::method_post); $data = "grant_type=password&username=$username&password=$password"; $len = strlen($data); $client->setheaders(array( 'Content-Type' => 'application/x-www-form-urlencoded', 'Content-Length' => $len )); $client->setoptions(['sslverifypeer' => false]); $client->setrawbody($data); $response = $client->send(); $body = Json::decode($response->getBody()); if(!empty($body->access_token)) if(!isset($_session)) session_start(); $_SESSION['access_token'] = $body->access_token; $_SESSION['username'] = $username; return true; else return false; public static function Logout() if(!isset($_session)) session_start(); $_SESSION['username'] = null; $_SESSION['access_token'] = null;?> public static function getmusicas() $enderecobase = EnderecoWebApi::$enderecoBase; $client = new Client($enderecoBase. '/api/musicas'); $client->setmethod(request::method_get); if(!isset($_session)) session_start(); $bearer_token = 'Bearer '. $_SESSION['access_token']; $client->setheaders(array( 'Authorization' => $bearer_token, )); $client->setoptions(['sslverifypeer' => false]); $response = $client->send(); $body=$response->getbody(); $musicas = Json::decode($response->getBody(), true); return $musicas;
2.2. Criar as ações musicasaction e logoutaction Em module/album/src /Album/Controller/AlbumController acrescentar as seguintes ações: public function musicasaction() if (!isset($_session)) session_start(); if (!isset($_session['access_token'])) WebApiServices::Login(); $musicas = WebApiServices::getMusicas(); return new ViewModel(array( 'musicas' => $musicas, )); public function logoutaction() if (!isset($_session)) session_start(); if (!isset($_session['access_token'])) WebApiServices::Logout(); return new ViewModel(); Em module/album/src /view/album/album acrescentar as seguintes vistas: Musicas.phtml <strong>module:</strong> <strong>controller:</strong> <strong>action:</strong> musicas $title = 'Musicas'; $this->headtitle($title);?> <h1> echo $this->escapehtml($title);?></h1> <table class="table"> <tr> <th>musicaid</th><th>artista</th><th>titulo</th> </tr> foreach ($musicas as $musica) :?> <tr> <td> echo $this->escapehtml($musica['musicaid']);?></td> <td> echo $this->escapehtml($musica['artista']);?></td> <td> echo $this->escapehtml($musica['titulo']);?></td> </tr> endforeach;?> </table>
Logout.phtml <strong>module:</strong> <strong>controller:</strong> <strong>action:</strong> Logout <h1>logout successfully</h1>