Skip to content

Commit 2cd37e9

Browse files
nodejs-restful-api
0 parents  commit 2cd37e9

File tree

7 files changed

+393
-0
lines changed

7 files changed

+393
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules/

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Rest API using NodeJS and Express
2+
3+
> Simple Rest API consuming JSON file
4+
5+
[![NPM Version][npm-image]][npm-url]
6+
[![Build Status][travis-image]][travis-url]
7+
[![Downloads Stats][npm-downloads]][npm-url]
8+
9+
Simple NodeJS Rest API consuming JSON file.
10+
11+
![](screenshot.png)
12+
13+
## Installation
14+
15+
```sh
16+
git clone
17+
npm install
18+
npm start
19+
```
20+
21+
## Usage example
22+
23+
```sh
24+
http://localhost:3000/clients
25+
```
26+
27+
<!-- Markdown link & img dfn's -->
28+
[npm-image]: https://img.shields.io/npm/v/datadog-metrics.svg?style=flat-square
29+
[npm-url]: https://npmjs.org/package/datadog-metrics
30+
[npm-downloads]: https://img.shields.io/npm/dm/datadog-metrics.svg?style=flat-square
31+
[travis-image]: https://img.shields.io/travis/dbader/node-datadog-metrics/master.svg?style=flat-square
32+
[travis-url]: https://travis-ci.org/dbader/node-datadog-metrics

about_api.txt

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# About API, REST and RESTFUL
2+
3+
## API
4+
5+
Acrônimo de Application Programming Interface (Interface de Programação de Aplicações) é basicamente um conjunto de rotinas e padrões estabelecidos por uma aplicação, para que outras aplicações possam utilizar as funcionalidades desta aplicação.
6+
7+
- Responsável por estabelecer comunicação entre diferentes serviços.
8+
- Meio de campo entre as tecnologias.
9+
- Intermediador para troca de informações.
10+
11+
## REST
12+
13+
um acrônimo para Representational State Transfer (Transferência de Estado Representativo).
14+
15+
Será feita a transferência de dados de uma maneira simbólica, figurativa, representativa, de maneira didática.
16+
17+
A transferência de dados, geralmente, usando o protocolo HTTP.
18+
19+
O REST delimita algumas obrigações nessas transferências de dados.
20+
21+
Resources seria então: Uma entidade ou um objeto.
22+
23+
### 6 NECESSIDADES (constraints) para ser RESTful
24+
25+
- _Uniform Interface_: Manter uma uniformidade, uma constância, um padrão na construção da interface. Nossa API precisa ser coerente para quem vai consumi-lá. Precisa fazer sentido para o cliente e não ser confusa. Logo, coisas como: o uso correto dos verbos HTTP; endpoints coerentes (todos os endpoints no plural, por exemplo); usar somente uma linguagem de comunicação (json) e não várias ao mesmo tempo; sempre enviar respostas aos clientes; são exemplos de aplicação de uma interface uniforme.
26+
27+
- _Client-server_: Separação do cliente e do armazenamento de dados (servidor), dessa forma, poderemos ter uma portabilidade do nosso sistema, usando o React para WEB e React Native para o smartphone, por exemplo.
28+
29+
- _Stateless_: Cada requisição que o cliente faz para o servidor, deverá conter todas as informações necessárias para o servidor entender e responder (RESPONSE) a requisição (REQUEST). Exemplo: A sessão do usuário deverá ser enviada em todas as requisições, para saber se aquele usuário está autenticado e apto a usar os serviços, e o servidor não pode lembrar que o cliente foi autenticado na requisição anterior. Nos nossos cursos, temos por padrão usar tokens para as comunicações.
30+
31+
- _Cacheable_: As respostas para uma requisição, deverão ser explicitas ao dizer se aquela resquição, pode ou não ser cacheada pelo cliente.
32+
33+
- _Layered System_: O cliente acessa a um endpoint, sem precisar saber da complexidade, de quais passos estão sendo necessários para o servidor responder a requisição, ou quais outras camadas o servidor estará lidando, para que a requisição seja respondida.
34+
35+
- _Code on demand (optional)_: Dá a possibilidade da nossa aplicação pegar códigos, como o javascript, por exemplo, e executar no cliente.
36+
37+
## RESTFUL
38+
39+
RESTful, é a aplicação dos padrões REST.
40+
41+
## BOAS PRÁTICAS
42+
43+
- Utilizar verbos HTTP para nossas requisições.
44+
- Utilizar plural ou singular na criação dos endpoints? _NÃO IMPORTA!_ use um padrão!!
45+
- Não deixar barra no final do endpoint
46+
- Nunca deixe o cliente sem resposta!
47+
48+
### VERBOS HTTP
49+
50+
- GET: Receber dados de um Resource.
51+
- POST: Enviar dados ou informações para serem processados por um Resource.
52+
- PUT: Atualizar dados de um Resource.
53+
- DELETE: Deletar um Resource
54+
55+
### STATUS DAS RESPOSTAS
56+
57+
- 1xx: Informação
58+
- 2xx: Sucesso
59+
- 200: OK
60+
- 201: CREATED
61+
- 204: Não tem conteúdo PUT POST DELETE
62+
- 3xx: Redirection
63+
- 4xx: Client Error
64+
- 400: Bad Request
65+
- 404: Not Found!
66+
- 5xx: Server Error
67+
500: Internal Server Error
68+

data.json

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
[
2+
{
3+
"id": 1,
4+
"name": "Leanne Graham",
5+
"username": "Bret",
6+
"email": "[email protected]",
7+
"address": {
8+
"street": "Kulas Light",
9+
"suite": "Apt. 556",
10+
"city": "Gwenborough",
11+
"zipcode": "92998-3874",
12+
"geo": {
13+
"lat": "-37.3159",
14+
"lng": "81.1496"
15+
}
16+
},
17+
"phone": "1-770-736-8031 x56442",
18+
"website": "hildegard.org",
19+
"company": {
20+
"name": "Romaguera-Crona",
21+
"catchPhrase": "Multi-layered client-server neural-net",
22+
"bs": "harness real-time e-markets"
23+
}
24+
},
25+
{
26+
"id": 2,
27+
"name": "Ervin Howell",
28+
"username": "Antonette",
29+
"email": "[email protected]",
30+
"address": {
31+
"street": "Victor Plains",
32+
"suite": "Suite 879",
33+
"city": "Wisokyburgh",
34+
"zipcode": "90566-7771",
35+
"geo": {
36+
"lat": "-43.9509",
37+
"lng": "-34.4618"
38+
}
39+
},
40+
"phone": "010-692-6593 x09125",
41+
"website": "anastasia.net",
42+
"company": {
43+
"name": "Deckow-Crist",
44+
"catchPhrase": "Proactive didactic contingency",
45+
"bs": "synergize scalable supply-chains"
46+
}
47+
},
48+
{
49+
"id": 3,
50+
"name": "Clementine Bauch",
51+
"username": "Samantha",
52+
"email": "[email protected]",
53+
"address": {
54+
"street": "Douglas Extension",
55+
"suite": "Suite 847",
56+
"city": "McKenziehaven",
57+
"zipcode": "59590-4157",
58+
"geo": {
59+
"lat": "-68.6102",
60+
"lng": "-47.0653"
61+
}
62+
},
63+
"phone": "1-463-123-4447",
64+
"website": "ramiro.info",
65+
"company": {
66+
"name": "Romaguera-Jacobson",
67+
"catchPhrase": "Face to face bifurcated interface",
68+
"bs": "e-enable strategic applications"
69+
}
70+
},
71+
{
72+
"id": 4,
73+
"name": "Patricia Lebsack",
74+
"username": "Karianne",
75+
"email": "[email protected]",
76+
"address": {
77+
"street": "Hoeger Mall",
78+
"suite": "Apt. 692",
79+
"city": "South Elvis",
80+
"zipcode": "53919-4257",
81+
"geo": {
82+
"lat": "29.4572",
83+
"lng": "-164.2990"
84+
}
85+
},
86+
"phone": "493-170-9623 x156",
87+
"website": "kale.biz",
88+
"company": {
89+
"name": "Robel-Corkery",
90+
"catchPhrase": "Multi-tiered zero tolerance productivity",
91+
"bs": "transition cutting-edge web services"
92+
}
93+
},
94+
{
95+
"id": 5,
96+
"name": "Chelsey Dietrich",
97+
"username": "Kamren",
98+
"email": "[email protected]",
99+
"address": {
100+
"street": "Skiles Walks",
101+
"suite": "Suite 351",
102+
"city": "Roscoeview",
103+
"zipcode": "33263",
104+
"geo": {
105+
"lat": "-31.8129",
106+
"lng": "62.5342"
107+
}
108+
},
109+
"phone": "(254)954-1289",
110+
"website": "demarco.info",
111+
"company": {
112+
"name": "Keebler LLC",
113+
"catchPhrase": "User-centric fault-tolerant solution",
114+
"bs": "revolutionize end-to-end systems"
115+
}
116+
},
117+
{
118+
"id": 6,
119+
"name": "Mrs. Dennis Schulist",
120+
"username": "Leopoldo_Corkery",
121+
"email": "[email protected]",
122+
"address": {
123+
"street": "Norberto Crossing",
124+
"suite": "Apt. 950",
125+
"city": "South Christy",
126+
"zipcode": "23505-1337",
127+
"geo": {
128+
"lat": "-71.4197",
129+
"lng": "71.7478"
130+
}
131+
},
132+
"phone": "1-477-935-8478 x6430",
133+
"website": "ola.org",
134+
"company": {
135+
"name": "Considine-Lockman",
136+
"catchPhrase": "Synchronised bottom-line interface",
137+
"bs": "e-enable innovative applications"
138+
}
139+
},
140+
{
141+
"id": 7,
142+
"name": "Kurtis Weissnat",
143+
"username": "Elwyn.Skiles",
144+
"email": "[email protected]",
145+
"address": {
146+
"street": "Rex Trail",
147+
"suite": "Suite 280",
148+
"city": "Howemouth",
149+
"zipcode": "58804-1099",
150+
"geo": {
151+
"lat": "24.8918",
152+
"lng": "21.8984"
153+
}
154+
},
155+
"phone": "210.067.6132",
156+
"website": "elvis.io",
157+
"company": {
158+
"name": "Johns Group",
159+
"catchPhrase": "Configurable multimedia task-force",
160+
"bs": "generate enterprise e-tailers"
161+
}
162+
},
163+
{
164+
"id": 8,
165+
"name": "Nicholas Runolfsdottir V",
166+
"username": "Maxime_Nienow",
167+
"email": "[email protected]",
168+
"address": {
169+
"street": "Ellsworth Summit",
170+
"suite": "Suite 729",
171+
"city": "Aliyaview",
172+
"zipcode": "45169",
173+
"geo": {
174+
"lat": "-14.3990",
175+
"lng": "-120.7677"
176+
}
177+
},
178+
"phone": "586.493.6943 x140",
179+
"website": "jacynthe.com",
180+
"company": {
181+
"name": "Abernathy Group",
182+
"catchPhrase": "Implemented secondary concept",
183+
"bs": "e-enable extensible e-tailers"
184+
}
185+
},
186+
{
187+
"id": 9,
188+
"name": "Glenna Reichert",
189+
"username": "Delphine",
190+
"email": "[email protected]",
191+
"address": {
192+
"street": "Dayna Park",
193+
"suite": "Suite 449",
194+
"city": "Bartholomebury",
195+
"zipcode": "76495-3109",
196+
"geo": {
197+
"lat": "24.6463",
198+
"lng": "-168.8889"
199+
}
200+
},
201+
"phone": "(775)976-6794 x41206",
202+
"website": "conrad.com",
203+
"company": {
204+
"name": "Yost and Sons",
205+
"catchPhrase": "Switchable contextually-based project",
206+
"bs": "aggregate real-time technologies"
207+
}
208+
},
209+
{
210+
"id": 10,
211+
"name": "Clementina DuBuque",
212+
"username": "Moriah.Stanton",
213+
"email": "[email protected]",
214+
"address": {
215+
"street": "Kattie Turnpike",
216+
"suite": "Suite 198",
217+
"city": "Lebsackbury",
218+
"zipcode": "31428-2261",
219+
"geo": {
220+
"lat": "-38.2386",
221+
"lng": "57.2232"
222+
}
223+
},
224+
"phone": "024-648-3804",
225+
"website": "ambrose.net",
226+
"company": {
227+
"name": "Hoeger LLC",
228+
"catchPhrase": "Centralized empowering task-force",
229+
"bs": "target end-to-end models"
230+
}
231+
}
232+
]

package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "nodejs-restful-api",
3+
"version": "1.0.0",
4+
"description": "Example Rest API using NodeJS and Express",
5+
"main": "server.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "Eder Goncalves",
10+
"license": "MIT"
11+
}

screenshot.png

42.6 KB
Loading

0 commit comments

Comments
 (0)