Skip to content

Projeto de criação de uma API Rest de carros, utilizando tecnologia node.js, express, o banco de dados mysql.

Notifications You must be signed in to change notification settings

lucas-m-ribeiro/APIRest

Repository files navigation

Construindo uma APIRest, com Node.js e Express

Objetivo

Objetivo deste projeto é criar uma APIRest utilizando as tecnologias Node.js e Express para retornar uma lista de carros salvo no banco de dados. Este projeto foi realizado com o estudo do livro Node Essencial escrito pelo professor Ricardo R Lecheta. A partir do capitulo 10 é construida a API de forma que cada capitulo é inserido uma nova parte ou uma melhoria no codigo.

Conceitos

API (Application Programming Interface)

O acrônimo API que provém do inglês Application Programming Interface (Em português, significa Interface de Programação de Aplicações), trata-se de um conjunto de rotinas e padrões estabelecidos e documentados por uma aplicação A, para que outras aplicações consigam utilizar as funcionalidades desta aplicação A, sem precisar conhecer detalhes da implementação do software.

Desta forma, entendemos que as APIs permitem uma interoperabilidade entre aplicações. Em outras palavras, a comunicação entre aplicações e entre os usuários.

Rest (Representational State Transfer)

A Representational State Transfer (REST), em português Transferência de Estado Representacional, é um estilo de arquitetura que define um conjunto de restrições e propriedades baseados no protocolo HTTP. Web Services que obedecem ao estilo arquitetural REST, ou web services RESTful, fornecem interoperabilidade entre sistemas de computadores na Internet. Os web services compatíveis com REST permitem que os sistemas solicitantes acessem e manipulem representações textuais de recursos da Web usando um conjunto uniforme e predefinido de operações sem estado

Principios fundamentais:

Protocolo cliente/servidor sem estado (stateless): cada requisição HTTP contém toda a informação necessária (Não manter sessão de login por exemplo)

Um conjunto de informações padrão bem definidas: POST, GET, PUT, DELETE, HEAD e OPTIONS

Cada recurso deve possuir um identificador único (URI).

Recursos (serviços) com múltiplas representações (formatos de retorno, como JSON ou XML).

Um webservice é dito RESTful se ele adere aos princípios fundamentais.

Tecnologias Utilizadas

Node.js

Express

Mysql

Criando o banco de dados!

Neste estudo utilizamos o banco de dados mysql que esta disponivel para download nos site: https://dev.mysql.com/downloads/windows/installer/8.0.html.

Para a criação da tabela do banco de dados de acordo com as regras de negocio, basta inserir os comandos abaixo:

create database livro;
grant all privileges on livro.* to "livro"@"localhost" identified by "livro123";
flush privileges;

use livro;

create table carro
    (id bigint not null auto_increment,
    nome varchar(255),
    descricao varchar(255),
    url_foto varchar(255),
    url_video varchar(255),
    latitude varchar(255),
    longitude varchar(255),
    tipo varchar(255), primary key (id) );
    
desc carro;

O primeiro comando indica que criaremos um banco de dados com o nome livro e para esse banco passamos para ele as mesmas permissoes de um usuario root padrão. Após criar o novo banco de dados, o comando use livro, ira dar acesso ao banco que acabamos de criar, para assim podermos criar a tabela de carros.

Inserindo dados na tabela carros

Após criar a tabela carros, precisamos inserir todos os carros que estarão disponiveis no banco, para inserir os carros basta colar os comandos abaixo no mysql:

#Carros Clássicos
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Tucker 1948','Descrição Tucker 1948','http://www.livroandroid.com.br/livro/carros/classicos/Tucker.png','http://www.livroandroid.com.br/livro/carros/classicos/tucker.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Chevrolet Corvette','Descrição Chevrolet Corvette','http://www.livroandroid.com.br/livro/carros/classicos/Chevrolet_Corvette.png','http://www.livroandroid.com.br/livro/carros/classicos/corvette.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Chevrolet Impala Coupe','Descrição Chevrolet Impala Coupe','http://www.livroandroid.com.br/livro/carros/classicos/Chevrolet_Impala_Coupe.png','http://www.livroandroid.com.br/livro/carros/classicos/chevrolet_impala.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Cadillac Deville Convertible','Descrição Cadillac Deville Convertible','http://www.livroandroid.com.br/livro/carros/classicos/Cadillac_Deville_Convertible.png','http://www.livroandroid.com.br/livro/carros/classicos/cadillac_deville.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Chevrolet Bel-Air','Descrição Chevrolet Bel-Air','http://www.livroandroid.com.br/livro/carros/classicos/Chevrolet_BelAir.png','http://www.livroandroid.com.br/livro/carros/classicos/chevrolet_bel_air.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Cadillac Eldorado','Descrição Cadillac Eldorado','http://www.livroandroid.com.br/livro/carros/classicos/Cadillac_Eldorado.png','http://www.livroandroid.com.br/livro/carros/classicos/cadillac_eldorado.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Ferrari 250 GTO','Descrição Ferrari 250 GTO','http://www.livroandroid.com.br/livro/carros/classicos/Ferrari_250_GTO.png','http://www.livroandroid.com.br/livro/carros/classicos/ferrari_gto.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Dodge Challenger','Descrição Dodge Challenger','http://www.livroandroid.com.br/livro/carros/classicos/Dodge_Challenger.png','http://www.livroandroid.com.br/livro/carros/classicos/dodge_challenger.mp4','','','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Camaro SS 1969','Descrição Camaro SS 1969','http://www.livroandroid.com.br/livro/carros/classicos/Camaro_SS.png','http://www.livroandroid.com.br/livro/carros/classicos/camaro_ss.mp4','-23.564224','-46.653156','classicos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Ford Mustang 1976','Descrição Ford Mustang 1976','http://www.livroandroid.com.br/livro/carros/classicos/Ford_Mustang.png','http://www.livroandroid.com.br/livro/carros/classicos/ford_mustang.mp4','-23.564224','-46.653156','classicos');


#Carros Esportivos
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Ferrari FF','Descrição Ferrari FF','http://www.livroandroid.com.br/livro/carros/esportivos/Ferrari_FF.png','http://www.livroandroid.com.br/livro/carros/esportivos/ferrari_ff.mp4','44.532218','10.864019','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('AUDI GT Spyder','Descrição AUDI GT Spyder','http://www.livroandroid.com.br/livro/carros/esportivos/Audi_Spyder.png','http://www.livroandroid.com.br/livro/carros/esportivos/audi_gt.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Porsche Panamera','Descrição Porsche Panamera','http://www.livroandroid.com.br/livro/carros/esportivos/Porsche_Panamera.png','http://www.livroandroid.com.br/livro/carros/esportivos/porsche_panamera.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Lamborghini Aventador','Descrição Lamborghini Aventador','http://www.livroandroid.com.br/livro/carros/esportivos/Lamborghini_Aventador.png','http://www.livroandroid.com.br/livro/carros/esportivos/lamborghini_aventador.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Chevrolet Corvette Z06','Descrição Chevrolet Corvette Z06','http://www.livroandroid.com.br/livro/carros/esportivos/Chevrolet_Corvette_Z06.png','http://www.livroandroid.com.br/livro/carros/esportivos/chevrolet_corvette.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('BMW M5','Descrição BMW M5','http://www.livroandroid.com.br/livro/carros/esportivos/BMW.png','http://www.livroandroid.com.br/livro/carros/esportivos/bmw-m5.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Renault Megane RS Trophy','Descrição Renault Megane RS Trophy','http://www.livroandroid.com.br/livro/carros/esportivos/Renault_Megane_Trophy.png','http://www.livroandroid.com.br/livro/carros/esportivos/renault_megane.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Maserati Grancabrio Sport','Descrição Maserati Grancabrio Sport','http://www.livroandroid.com.br/livro/carros/esportivos/Maserati_Grancabrio_Sport.png','http://www.livroandroid.com.br/livro/carros/esportivos/renault_megane.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('McLAREN MP4-12C','Descrição McLAREN MP4-12C','http://www.livroandroid.com.br/livro/carros/esportivos/McLAREN.png','http://www.livroandroid.com.br/livro/carros/esportivos/mcLaren.mp4','-23.564224','-46.653156','esportivos');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('MERCEDES-BENZ C63 AMG','Descrição MERCEDES-BENZ C63 AMG','http://www.livroandroid.com.br/livro/carros/esportivos/MERCEDES_BENZ_AMG.png','http://www.livroandroid.com.br/livro/carros/esportivos/mercedes.mp4','-23.564224','-46.653156','esportivos');


#Carros de Luxo
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Bugatti Veyron','Descrição Bugatti Veyron','http://www.livroandroid.com.br/livro/carros/luxo/Bugatti_Veyron.png','http://www.livroandroid.com.br/livro/carros/luxo/bugatti_veyron.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Ferrari Enzo','Descrição Ferrari Enzo','http://www.livroandroid.com.br/livro/carros/luxo/Ferrari_Enzo.png','http://www.livroandroid.com.br/livro/carros/luxo/ferrari_enzo.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Lamborghini Reventon','Descrição Lamborghini Reventon','http://www.livroandroid.com.br/livro/carros/luxo/Lamborghini_Reventon.png','http://www.livroandroid.com.br/livro/carros/luxo/lamborghini _reventon.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Leblanc Mirabeau','Descrição Leblanc Mirabeau','http://www.livroandroid.com.br/livro/carros/luxo/Leblanc_Mirabeau.png','http://www.livroandroid.com.br/livro/carros/luxo/leblanc_mirabeau.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Shelby Supercars Ultimate','Descrição Shelby Supercars Ultimate','http://www.livroandroid.com.br/livro/carros/luxo/Shelby_Supercars_Ultimate.png','http://www.livroandroid.com.br/livro/carros/luxo/shelby.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Pagani Zonda','Descrição Pagani Zonda','http://www.livroandroid.com.br/livro/carros/luxo/Pagani_Zonda.png','http://www.livroandroid.com.br/livro/carros/luxo/pagani_zonda.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Koenigsegg CCX','Descrição Koenigsegg CCX','http://www.livroandroid.com.br/livro/carros/luxo/Koenigsegg_CCX.png','http://www.livroandroid.com.br/livro/carros/luxo/koenigsegg.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Mercedes SLR McLaren','Descrição Mercedes SLR McLaren','http://www.livroandroid.com.br/livro/carros/luxo/Mercedes_McLaren.png','http://www.livroandroid.com.br/livro/carros/luxo/mclaren_slr.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Rolls Royce Phantom','Descrição Rolls Royce Phantom','http://www.livroandroid.com.br/livro/carros/luxo/Rolls_Royce_Phantom.png','http://www.livroandroid.com.br/livro/carros/luxo/rolls_royce.mp4','-23.564224','-46.653156','luxo');
insert into carro (nome,descricao,url_foto,url_video,latitude,longitude,tipo) VALUES('Lexus LFA','Descrição Lexus LFA','http://www.livroandroid.com.br/livro/carros/luxo/Lexus_LFA.png','http://www.livroandroid.com.br/livro/carros/luxo/lexus.mp4','-23.564224','-46.653156','luxo');

#filtro para a listagem de todos os carros no banco.
select id,nome,tipo from carro;

Os carros inseridos são separados por 3 categorias (calssicos, esportivos, luxo,), onde que são inseridos 10 carros de cada cateoria no banco. O ultimo comando listado select id,nome,tipo from carro;, gera uma pesquisa pelos carros filtrando os 3 campos indicados como id, nome e tipo, isto para facilitar a pesquisa por carros na tabela.

About

Projeto de criação de uma API Rest de carros, utilizando tecnologia node.js, express, o banco de dados mysql.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published