

API REST
COMUNICACIÓN CLIENTE - SERVIDOR
Resumen
GET ( URL )
var URL = 'https://jsonplaceholder.typicode.com/users'
GET ( URL + '/25' )
POST ( URL, DATA )
PUT ( URL + '/25', DATA )
DELETE ( URL + '/25' )
CREAR SERVIDOR
var http = require('http');
var server = http.createServer( ( req, res) => {
console.log('Estoy atento a las llamadas');
});
server.listen(5000, (err) => {
if (!err){
console.log('Servidor escuchando en el puerto 5000');
}
});
MODULO EXPRESSJS
npm i express
Creando server
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
GET: "http://localhost:3000/ " => 'Hello world'
Creando server
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
POST: "http://localhost:3000/ " => ¿?
Creando server
var express = require('express')
var app = express()
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000)
GET: "http://localhost:3000/users " => ¿?
Respuesta json
var express = require('express')
var app = express()
var users = [{name : 'a'},{name : 'b'}]
app.get('/users', function (req, res) {
res.json(users);
})
app.listen(3000)
GET: "http://localhost:3000/users" => [ {} , {} ]
PARÁMETROS
REQ Y RES
== REQUEST =>
Ordenador usuario
Servidor facebook
REQ

REQ
req.url
req.method
req.params
req.headers
req.query
/USERS
"GET" || "POST" || "PUT" || "DELETE"
{ }
{ }
{ }
RES
<= RESPONSE ==
Ordenador usuario
Servidor facebook
RES.SEND()
RES.JSON()
JUGUETEAMOS POSTMAN
GET Y POST
GET
1 RECURSO = 1 URL
STANDARD => NOUNS
http://localhost:3000/users
http://localhost:3000/books
http://localhost:3000/books/3
También se suelen nombrar en singular
GET
EN LA PRÁCTICA
app.get('/users', function (req, res) {
res.json(users);
})
app.get('/users/:id', function (req, res) {
const userId = req.params.id;
const user = users.find(u => u.id == userId);
res.json(user);
});
POST
app.post('/users', function (req, res) {
const newUser = req.body; // ¿UNDEFINED?
newUser.id = ();
users.push(newUser);
res.json(newUser);
})
MIENTRAS TANTO EN EL REQ

¿ Y EL CONTENIDO DEL FORMULARIO ?

var express = require('express')
var app = express();
// Middlewares
app.use(express.json());
IMPORTANTE
DELETE Y PUT
DELETE Y PUT

HTTP
CODE ERRORS
- 400 Bad Request
- 404 Not Found
- 405 Method Not Allowed
- 418 I'm a teapot
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
ERROR
app.post('/users', function (req, res) {
if (bodyIsEmpty(req.body)){
return res.status(400).send('Contenido del body vacío');
}
console.log('Hola');
const newUser = req.body;
newUser.id = users.length;
users.push(newUser);
res.json(newUser);
})
npm i -g nodemon
Oye, Yunior pero ...
¿ Cómo conecto yo mi "api" con un front ?
Pues como ya hemos hecho con otras apis, mediante axios y si usas servicios mejor que mejor ;)
ejemplo

Cuando tu app arranque tendrás que hacerle un GET a tu server, ¿a dónde?
axios.get('http://localhost:5000/tasks')
ejemplo

Cuando se pulse ese botón, tendrás que mandar a hacer un delete a tu api y luego, si todo ha ido, bien borrarlo de la pantalla
ejemplo

Cuando se pulse ese botón, tendrás que avisar a la api que se ha completado una tarea.
Aquí ya hay varias opciones:
- Si seguimos el estándar. PATCH /api/todos/20 y en el body el atributo isCompleted : true.
- Otras opciones. Por ejemplo, crear un endpoint concreto para esta "acción" GET/api/completarTODO/20, o podemos mandar la tarea con su completed a true por un PUT
ejemplo

Al introducir una tarea por el front :
- Hacer un post con axios a la api
- O bien si estuviese envuelto en un formulario especificar en el form que se hace un POST y que el action es a tu url.
EJERCICIOS
El backend tiene que permitir
- Crear tareas
- Obtener tareas
- Editar tareas
- Borrar tareas
Creamos el backend para un TODOLIST :)
EJERCICIOS
Primera API
Queremos desarrollar una api restful con node para un proyecto copia de twitter. Aunque de momento, será solo una primera versión con usuarios y tweets como si fuese un blog personal.
USUARIO
username* : string<uniq>
name? : string
email* : string
tweets : Tweet []
TWEET
id* : string<uniq>
text* : string
owner* : string<ID>
createdAt : timestamp
Primera API
- Deberán estar implementadas las funcionalidades de:
- Crear un nuevo usuario. En la "variable de usuarios" De momento no hay nada de logins
- Borrar un usuario
- Editar el email de un usuario o el nombre (PATCH)
- Subir un tweet nuevo por parte de un usuario
- Ir a buscar un tweet en concreto por su id
- Borrar un tweet por su id
OJO ! CONTROLA QUE LA API NO SE PUEDA QUEDAR PILLADA EN NINGÚN MOMENTO, controla campos vacíos, request inválidas, etc etc y devuelve el error en la respuesta y el código correcto para dicho caso
SPEGC Agosto 2022 Full Stack. Nodejs Segundo Día
By Yunior González Santana
SPEGC Agosto 2022 Full Stack. Nodejs Segundo Día
- 202