├── README.md ├── collection.txt ├── conexao ├── Conexao.php └── config.php ├── control └── ConteudoControl.php ├── diario.sql ├── model └── Conteudo.php └── view └── Conteudo ├── editar.php ├── excluir.php ├── inserir.php └── listar.php /README.md: -------------------------------------------------------------------------------- 1 | # api-rest-php 2 | Exemplo de CRUD utilizando arquitetura RESTful, feito com php. 3 | 4 | 5 | Uma coisa que não vi durante minha graduação e achava que se tratava de um bixo de 7 cabeças é tudo que envolve arquitetura RESTful. Até no trabalho nunca me foi solicitado trabalhar com API's, nome que só de ouvir falar já me causava certo receio. 6 | 7 | Segundo a wikipedia, 'O termo REST se referia, originalmente, a um conjunto de princípios de arquitetura, na atualidade se usa no sentido mais amplo para descrever qualquer interface web simples que utiliza XML e HTTP (ou YAML, JSON, ou texto puro), sem as abstrações adicionais dos protocolos baseados em padrões de trocas de mensagem como o protocolo de serviços Web SOAP.' (http://pt.wikipedia.org/wiki/REST) 8 | 9 | Infelizmente sou daqueles caras que só aprende na base da pancada, e com relação a trabalhar com webservices não foi diferente. Houve um belo dia em que me chamaram para uma entrevista de emprego e me foi solicitado que eu criasse um CRUD de uma aplicação aleatória onde a mesma teria que ser feita no formato de API, utilizando arquitetura RESTful, enviando e consumindo dados no formato JSON. 10 | 11 | Por sorte o cara que me entrevistou permitiu que eu fizesse a aplicação em casa (fui sincero com ele, disse que precisaria pesquisar a respeito, e que na hora eu não iria conseguir fazer). Em um ou dois dias eu aprendi e consegui (com a ajuda de um amigo meu) finalizar o projeto que foi pedido. Claro que é algo simples, mas me ajudou e muito a clarear minha visão a respeito do assunto. 12 | 13 | Espero que fique claro para quem ler o código, além de agradecer imensamente dicas e melhorias no código :D 14 | -------------------------------------------------------------------------------- /collection.txt: -------------------------------------------------------------------------------- 1 | https://www.getpostman.com/collections/9150699ce3282c85dd1c -------------------------------------------------------------------------------- /conexao/Conexao.php: -------------------------------------------------------------------------------- 1 | setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 16 | self::$instance->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); 17 | } catch (PDOException $e) { 18 | echo $e->getMessage(); 19 | } 20 | 21 | } 22 | 23 | return self::$instance; 24 | } 25 | 26 | public static function prepare($sql){ 27 | return self::getInstance()->prepare($sql); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /conexao/config.php: -------------------------------------------------------------------------------- 1 | 9 | 10 | -------------------------------------------------------------------------------- /control/ConteudoControl.php: -------------------------------------------------------------------------------- 1 | titulo; 8 | return $conteudo->insert($obj); 9 | header('Location:listar.php'); 10 | } 11 | 12 | function update($obj,$id){ 13 | $conteudo = new Conteudo(); 14 | return $conteudo->update($obj,$id); 15 | } 16 | 17 | function delete($obj,$id){ 18 | $conteudo = new Conteudo(); 19 | return $conteudo->delete($obj,$id); 20 | } 21 | 22 | function find($id = null){ 23 | 24 | } 25 | 26 | function findAll(){ 27 | $conteudo = new Conteudo(); 28 | return $conteudo->findAll(); 29 | } 30 | } 31 | 32 | ?> -------------------------------------------------------------------------------- /diario.sql: -------------------------------------------------------------------------------- 1 | -- phpMyAdmin SQL Dump 2 | -- version 4.1.14 3 | -- http://www.phpmyadmin.net 4 | -- 5 | -- Host: 127.0.0.1 6 | -- Generation Time: 20-Mar-2015 às 13:35 7 | -- Versão do servidor: 5.6.17 8 | -- PHP Version: 5.5.12 9 | 10 | SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 11 | SET time_zone = "+00:00"; 12 | 13 | 14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; 16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; 17 | /*!40101 SET NAMES utf8 */; 18 | 19 | -- 20 | -- Database: `diario` 21 | -- 22 | 23 | -- -------------------------------------------------------- 24 | 25 | -- 26 | -- Estrutura da tabela `conteudo` 27 | -- 28 | 29 | CREATE TABLE IF NOT EXISTS `conteudo` ( 30 | `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 31 | `titulo` varchar(120) NOT NULL, 32 | `descricao` longtext NOT NULL, 33 | `horario` varchar(30) NOT NULL, 34 | `curso_id` int(30) NOT NULL, 35 | `periodo_id` int(30) NOT NULL, 36 | `disciplina_id` int(30) NOT NULL, 37 | PRIMARY KEY (`id`), 38 | UNIQUE KEY `id` (`id`) 39 | ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ; 40 | 41 | -- 42 | -- Extraindo dados da tabela `conteudo` 43 | -- 44 | 45 | INSERT INTO `conteudo` (`id`, `titulo`, `descricao`, `horario`, `curso_id`, `periodo_id`, `disciplina_id`) VALUES 46 | (8, 'algoritmo', 'aula de array', '15:00', 5, 4, 5); 47 | 48 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 49 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; 50 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; 51 | -------------------------------------------------------------------------------- /model/Conteudo.php: -------------------------------------------------------------------------------- 1 | titulo; 14 | } 15 | 16 | function getDescricao() { 17 | return $this->descricao; 18 | } 19 | 20 | function getHorario() { 21 | return $this->horario; 22 | } 23 | 24 | function getCurso_id() { 25 | return $this->curso_id; 26 | } 27 | 28 | function getPeriodo_id() { 29 | return $this->periodo_id; 30 | } 31 | 32 | function getDisciplina_id() { 33 | return $this->disciplina_id; 34 | } 35 | 36 | function setTitulo($titulo) { 37 | $this->titulo = $titulo; 38 | } 39 | 40 | function setDescricao($descricao) { 41 | $this->descricao = $descricao; 42 | } 43 | 44 | function setHorario($horario) { 45 | $this->horario = $horario; 46 | } 47 | 48 | function setCurso_id($curso_id) { 49 | $this->curso_id = $curso_id; 50 | } 51 | 52 | function setPeriodo_id($periodo_id) { 53 | $this->periodo_id = $periodo_id; 54 | } 55 | 56 | function setDisciplina_id($disciplina_id) { 57 | $this->disciplina_id = $disciplina_id; 58 | } 59 | 60 | public function insert($obj){ 61 | $sql = "INSERT INTO conteudo(titulo,descricao,horario,curso_id,periodo_id,disciplina_id) VALUES (:titulo,:descricao,:horario,:curso_id,:periodo_id,:disciplina_id)"; 62 | $consulta = Conexao::prepare($sql); 63 | $consulta->bindValue('titulo', $obj->titulo); 64 | $consulta->bindValue('descricao', $obj->descricao); 65 | $consulta->bindValue('horario' , $obj->horario); 66 | $consulta->bindValue('curso_id' , $obj->curso_id); 67 | $consulta->bindValue('periodo_id' , $obj->periodo_id); 68 | $consulta->bindValue('disciplina_id' , $obj->periodo_id); 69 | return $consulta->execute(); 70 | 71 | } 72 | 73 | public function update($obj,$id = null){ 74 | $sql = "UPDATE conteudo SET titulo = :titulo, descricao = :descricao,horario = :horario, curso_id = :curso_id,periodo_id =:periodo_id, disciplina_id = :disciplina_id WHERE id = :id "; 75 | $consulta = Conexao::prepare($sql); 76 | $consulta->bindValue('titulo', $obj->titulo); 77 | $consulta->bindValue('descricao', $obj->descricao); 78 | $consulta->bindValue('horario' , $obj->horario); 79 | $consulta->bindValue('curso_id', $obj->curso_id); 80 | $consulta->bindValue('periodo_id' , $obj->periodo_id); 81 | $consulta->bindValue('disciplina_id' , $obj->disciplina_id); 82 | $consulta->bindValue('id', $id); 83 | return $consulta->execute(); 84 | } 85 | 86 | public function delete($obj,$id = null){ 87 | $sql = "DELETE FROM conteudo WHERE id = :id"; 88 | $consulta = Conexao::prepare($sql); 89 | $consulta->bindValue('id',$id); 90 | $consulta->execute(); 91 | } 92 | 93 | public function find($id = null){ 94 | 95 | } 96 | 97 | public function findAll(){ 98 | $sql = "SELECT * FROM conteudo"; 99 | $consulta = Conexao::prepare($sql); 100 | $consulta->execute(); 101 | return $consulta->fetchAll(); 102 | } 103 | 104 | } 105 | 106 | ?> -------------------------------------------------------------------------------- /view/Conteudo/editar.php: -------------------------------------------------------------------------------- 1 | titulo; 7 | 8 | $id = $obj->id; 9 | 10 | 11 | if(!empty($data)){ 12 | $conteudoControl = new ConteudoControl(); 13 | $conteudoControl->update($obj , $id); 14 | header('Location:listar.php'); 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | ?> -------------------------------------------------------------------------------- /view/Conteudo/excluir.php: -------------------------------------------------------------------------------- 1 | titulo; 7 | 8 | $id = $obj->id; 9 | 10 | 11 | if(!empty($data)){ 12 | $conteudoControl = new ConteudoControl(); 13 | $conteudoControl->delete($obj,$id); 14 | header('Location:listar.php'); 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | ?> -------------------------------------------------------------------------------- /view/Conteudo/inserir.php: -------------------------------------------------------------------------------- 1 | titulo; 7 | 8 | 9 | 10 | if(!empty($data)){ 11 | $conteudoControl = new ConteudoControl(); 12 | $conteudoControl->insert($obj); 13 | header('Location:listar.php'); 14 | } 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ?> -------------------------------------------------------------------------------- /view/Conteudo/listar.php: -------------------------------------------------------------------------------- 1 | findAll() as $valor){ 8 | echo json_encode($valor); 9 | } 10 | 11 | 12 | ?> --------------------------------------------------------------------------------