Compare commits
No commits in common. "eea515c805e1b6f86e10514c627db75e71da3b12" and "251cebdb374091d5ff355ab3bb8b5abc1c54c83e" have entirely different histories.
eea515c805
...
251cebdb37
33
README.md
33
README.md
@ -1,12 +1,5 @@
|
|||||||
# Apuntes PHP REST API
|
# Apuntes PHP REST API
|
||||||
|
|
||||||
Proyecto realizado con fines didácticos, con el propósito de comprender la
|
|
||||||
creación y funcionamiento de una API básica utilizando **Php** y **Apache**.
|
|
||||||
Además de servir de introducción los mismos.
|
|
||||||
|
|
||||||
Las clases, metodos y funciones creadas dentro de este proyecto cumplen este
|
|
||||||
propósito. No estan diseñadas para correr en un entorno de producción.
|
|
||||||
|
|
||||||
### Requerimientos
|
### Requerimientos
|
||||||
|
|
||||||
[MariaDB](https://mariadb.com/docs/), [Apache](https://httpd.apache.org/docs/)
|
[MariaDB](https://mariadb.com/docs/), [Apache](https://httpd.apache.org/docs/)
|
||||||
@ -43,9 +36,7 @@ cd /var/www/
|
|||||||
sudo ln -s $HOME/projects/apirest html
|
sudo ln -s $HOME/projects/apirest html
|
||||||
```
|
```
|
||||||
|
|
||||||
Editar archivo de configuración de apache `sudoedit /etc/apache2/apache2.conf`
|
`/etc/apache2/apache2.conf`
|
||||||
|
|
||||||
Agregar:
|
|
||||||
|
|
||||||
```apache
|
```apache
|
||||||
<Directory /var/www/>
|
<Directory /var/www/>
|
||||||
@ -69,7 +60,7 @@ sudo systemctl restart apache2
|
|||||||
|
|
||||||
> ¿Como mostrar errores en php? [stackoverflow](https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display).
|
> ¿Como mostrar errores en php? [stackoverflow](https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display).
|
||||||
|
|
||||||
Agregar la sgte. linea en archivo [.htaccess](./apirest_yt/.htaccess)
|
Agregar la sgte. linea en `.htaccess`
|
||||||
|
|
||||||
```apache
|
```apache
|
||||||
php_flag display_errors 1
|
php_flag display_errors 1
|
||||||
@ -90,8 +81,7 @@ display_errors = On
|
|||||||
|
|
||||||
## Inicio del proyecto
|
## Inicio del proyecto
|
||||||
|
|
||||||
Crear y poblar base de datos, según [archivo sql](./original/database/apirest.sql)
|
Crear y poblar base de datos, según archivo `./original/database/apirest.sql`.
|
||||||
en `./original/database/apirest.sql`.
|
|
||||||
|
|
||||||
Crear archivo de configuración en la ruta `./<projecto>/clases/conexion/config`.
|
Crear archivo de configuración en la ruta `./<projecto>/clases/conexion/config`.
|
||||||
|
|
||||||
@ -109,24 +99,11 @@ Crear archivo de configuración en la ruta `./<projecto>/clases/conexion/config`
|
|||||||
|
|
||||||
#### Creación de token
|
#### Creación de token
|
||||||
|
|
||||||
Combinación de 2 funciones de *php* para generar un *token* único en [archivo](./apirest_yt/clases/auth.class.php)
|
Combinación de 2 funciones de *php* para generar un *token* único en `<proyecto>/clases/auth.class.php`
|
||||||
`<proyecto>/clases/auth.class.php`.
|
|
||||||
|
|
||||||
- Función [bin2hex](https://www.php.net/manual/en/function.bin2hex.php) devuelve
|
- Función [bin2hex](https://www.php.net/manual/en/function.bin2hex.php) devuelve
|
||||||
un *string hexadecimal*.
|
un `string` *hexadecimal*.
|
||||||
- Función [openssl_random_pseudo_bytes](https://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php).
|
- Función [openssl_random_pseudo_bytes](https://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php).
|
||||||
|
|
||||||
> [Metodos HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
|
> [Metodos HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods)
|
||||||
|
|
||||||
#### Desactivar tokens
|
|
||||||
|
|
||||||
Cron Job para cambiar estado de tokens a ***Inactivo***
|
|
||||||
|
|
||||||
Agregar tarea: `crontab -e`
|
|
||||||
|
|
||||||
ej. Ejecutar tarea cada 5 minutos.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
# m h dom mon dow command
|
|
||||||
*/5 * * * * curl localhost/php_apirest/apirest_yt/cron/actualizar_tokens &>/dev/null
|
|
||||||
```
|
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
body{
|
|
||||||
color:black;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.container {
|
|
||||||
margin: 10px;
|
|
||||||
border: 1px solid #D0D0D0;
|
|
||||||
box-shadow: 0 0 8px #D0D0D0;
|
|
||||||
}
|
|
||||||
h1{
|
|
||||||
color: #444;
|
|
||||||
background-color: transparent;
|
|
||||||
border-bottom: 1px solid #D0D0D0;
|
|
||||||
font-size: 24px;
|
|
||||||
font-weight: normal;
|
|
||||||
margin: 0 0 14px 0;
|
|
||||||
padding: 14px 15px 10px 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
display: block;
|
|
||||||
font-size: 1.5em;
|
|
||||||
-webkit-margin-before: 0.83em;
|
|
||||||
-webkit-margin-after: 0.83em;
|
|
||||||
-webkit-margin-start: 0px;
|
|
||||||
-webkit-margin-end: 0px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
p {
|
|
||||||
display: block;
|
|
||||||
-webkit-margin-before: 1em;
|
|
||||||
-webkit-margin-after: 1em;
|
|
||||||
-webkit-margin-start: 0px;
|
|
||||||
-webkit-margin-end: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.divbody{
|
|
||||||
margin: 0 15px 0 15px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p.divfooter {
|
|
||||||
text-align: right;
|
|
||||||
font-size: 16px;
|
|
||||||
border-top: 1px solid #D0D0D0;
|
|
||||||
line-height: 32px;
|
|
||||||
padding: 0 10px 0 10px;
|
|
||||||
margin: 20px 0 0 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
font-family: Consolas, Monaco, Courier New, Courier, monospace;
|
|
||||||
font-size: 16px;
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
border: 1px solid #D0D0D0;
|
|
||||||
color: #002166;
|
|
||||||
display: block;
|
|
||||||
margin: 14px 0 14px 0;
|
|
||||||
padding: 12px 10px 12px 10px;
|
|
||||||
}
|
|
@ -3,6 +3,7 @@ require_once 'conexion/conexion.php';
|
|||||||
require_once 'clases/respuestas.class.php';
|
require_once 'clases/respuestas.class.php';
|
||||||
|
|
||||||
class pacientes extends conexion{
|
class pacientes extends conexion{
|
||||||
|
|
||||||
private $table = "pacientes";
|
private $table = "pacientes";
|
||||||
private $pacienteid = "";
|
private $pacienteid = "";
|
||||||
private $dni = "";
|
private $dni = "";
|
||||||
@ -13,13 +14,12 @@ class pacientes extends conexion{
|
|||||||
private $telefono = "";
|
private $telefono = "";
|
||||||
private $fecha_nacimiento = "0000-00-00";
|
private $fecha_nacimiento = "0000-00-00";
|
||||||
private $correo = "";
|
private $correo = "";
|
||||||
private $token = "";
|
|
||||||
// 532c75dac0f7f4d311300302538ab49f
|
|
||||||
|
|
||||||
public function listaPacientes($pagina = 1){
|
public function listaPacientes($pagina = 1){
|
||||||
// paginador
|
// paginador
|
||||||
$inicio = 0;
|
$inicio = 0;
|
||||||
$cantidad = 10;
|
$cantidad = 100;
|
||||||
if ($pagina > 1){
|
if ($pagina > 1){
|
||||||
$inicio = ($cantidad * ($pagina - 1)) + 1;
|
$inicio = ($cantidad * ($pagina - 1)) + 1;
|
||||||
$cantidad = $cantidad * $pagina;
|
$cantidad = $cantidad * $pagina;
|
||||||
@ -39,14 +39,6 @@ class pacientes extends conexion{
|
|||||||
public function post($json){
|
public function post($json){
|
||||||
$_respuestas = new respuestas;
|
$_respuestas = new respuestas;
|
||||||
$datos = json_decode($json, true);
|
$datos = json_decode($json, true);
|
||||||
|
|
||||||
// validación token
|
|
||||||
if (!isset($datos['token'])){
|
|
||||||
return $_respuestas->error_401();
|
|
||||||
} else {
|
|
||||||
$this->token = $datos['token'];
|
|
||||||
$arrayToken = $this->buscarToken();
|
|
||||||
if ($arrayToken){
|
|
||||||
if (!isset($datos['nombre']) || !isset($datos['dni']) || !isset($datos['correo'])){
|
if (!isset($datos['nombre']) || !isset($datos['dni']) || !isset($datos['correo'])){
|
||||||
return $_respuestas->error_400();
|
return $_respuestas->error_400();
|
||||||
} else {
|
} else {
|
||||||
@ -69,10 +61,6 @@ class pacientes extends conexion{
|
|||||||
return $_respuestas->error_500();
|
return $_respuestas->error_500();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return $_respuestas->error_401("Token inválido o caducado");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function insertarPaciente(){
|
private function insertarPaciente(){
|
||||||
@ -92,14 +80,6 @@ class pacientes extends conexion{
|
|||||||
public function put($json){
|
public function put($json){
|
||||||
$_respuestas = new respuestas;
|
$_respuestas = new respuestas;
|
||||||
$datos = json_decode($json, true);
|
$datos = json_decode($json, true);
|
||||||
|
|
||||||
// validación token
|
|
||||||
if (!isset($datos['token'])){
|
|
||||||
return $_respuestas->error_401();
|
|
||||||
} else {
|
|
||||||
$this->token = $datos['token'];
|
|
||||||
$arrayToken = $this->buscarToken();
|
|
||||||
if ($arrayToken){
|
|
||||||
if (!isset($datos['pacienteid'])){
|
if (!isset($datos['pacienteid'])){
|
||||||
return $_respuestas->error_400();
|
return $_respuestas->error_400();
|
||||||
} else {
|
} else {
|
||||||
@ -125,10 +105,6 @@ class pacientes extends conexion{
|
|||||||
return $_respuestas->error_500();
|
return $_respuestas->error_500();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
return $_respuestas->error_401("Token inválido o caducado");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function modificarPaciente(){
|
private function modificarPaciente(){
|
||||||
@ -146,72 +122,6 @@ class pacientes extends conexion{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function delete($json){
|
|
||||||
$_respuestas = new respuestas;
|
|
||||||
$datos = json_decode($json, true);
|
|
||||||
|
|
||||||
// validación token
|
|
||||||
if (!isset($datos['token'])){
|
|
||||||
return $_respuestas->error_401();
|
|
||||||
} else {
|
|
||||||
$this->token = $datos['token'];
|
|
||||||
$arrayToken = $this->buscarToken();
|
|
||||||
if ($arrayToken){
|
|
||||||
if (!isset($datos['pacienteid'])){
|
|
||||||
return $_respuestas->error_400();
|
|
||||||
} else {
|
|
||||||
$this->pacienteid = $datos['pacienteid'];
|
|
||||||
$resp = $this->eliminarPaciente();
|
|
||||||
if ($resp){
|
|
||||||
$respuesta = $_respuestas->response;
|
|
||||||
$respuesta['result'] = array(
|
|
||||||
//'filas_afectadas' => $resp,
|
|
||||||
'pacienteid' => $this->pacienteid
|
|
||||||
);
|
|
||||||
return $respuesta;
|
|
||||||
} else {
|
|
||||||
return $_respuestas->error_500();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return $_respuestas->error_401("Token inválido o caducado");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function eliminarPaciente(){
|
|
||||||
$query = "DELETE FROM $this->table WHERE PacienteId = '$this->pacienteid'";
|
|
||||||
$resp = parent::nonQuery($query);
|
|
||||||
if ($resp >= 1){
|
|
||||||
return $resp;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function buscarToken(){
|
|
||||||
$query = "SELECT TokenId,UsuarioId,Estado FROM usuarios_token
|
|
||||||
WHERE Token = '$this->token' AND Estado = 'Activo'";
|
|
||||||
$resp = parent::obtenerDatos($query);
|
|
||||||
if ($resp){
|
|
||||||
return $resp;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sin implementación
|
|
||||||
//private function actualizarToken($tokenid){
|
|
||||||
// $date = date("Y m d H:i");
|
|
||||||
// $query = "UPDATE usuarios_token SET Fecha = '$date'
|
|
||||||
// WHERE TokenId = '$tokenid'";
|
|
||||||
// $resp = parent::nonQuery($query);
|
|
||||||
// if ($resp >= 1){
|
|
||||||
// return $resp;
|
|
||||||
// } else {
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -42,14 +42,6 @@ class respuestas{
|
|||||||
return $this->response;
|
return $this->response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function error_401($mensaje = "No autorizado"){
|
|
||||||
$this->response['status'] = "error";
|
|
||||||
$this->response['result'] = array(
|
|
||||||
"error_id" => "401",
|
|
||||||
"error_msg" => $mensaje
|
|
||||||
);
|
|
||||||
return $this->response;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once 'conexion/conexion.php';
|
|
||||||
|
|
||||||
class token extends conexion{
|
|
||||||
public function actualizarToken($fecha){
|
|
||||||
$query = "UPDATE usuarios_token SET Estado = 'Inactivo'
|
|
||||||
WHERE Fecha < '$fecha' AND Estado = 'Activo'";
|
|
||||||
$verificar = parent::nonQuery(($query));
|
|
||||||
if ($verificar > 0){
|
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,8 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once '../clases/token.class.php';
|
|
||||||
$_token = new token;
|
|
||||||
$fecha = date('Y-m-d H:i');
|
|
||||||
echo $_token->actualizarToken($fecha);
|
|
||||||
|
|
||||||
?>
|
|
@ -1,83 +1,20 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="es">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>API de Prueba</title>
|
|
||||||
<link rel="stylesheet" href="assets/estilo.css" type="text/css">
|
|
||||||
</head>
|
|
||||||
<?php
|
<?php
|
||||||
// echo "INDEX.php".'</br>';
|
echo "INDEX.php".'</br>';
|
||||||
|
|
||||||
// require_once "clases/conexion/conexion.php";
|
require_once "clases/conexion/conexion.php";
|
||||||
// $conector = new conexion;
|
|
||||||
// $conector->test_conector();
|
|
||||||
|
|
||||||
// # Prueba Select
|
$conector = new conexion;
|
||||||
// $query = "SELECT * FROM pacientes";
|
|
||||||
// echo '<pre>'; print_r($conector->obtenerDatos($query)); echo '</pre>';
|
#$conector->test_conector();
|
||||||
|
|
||||||
|
// Prueba Select
|
||||||
|
#$query = "SELECT * FROM pacientes";
|
||||||
|
#echo '<pre>'; print_r($conector->obtenerDatos($query)); echo '</pre>';
|
||||||
|
|
||||||
|
// Prueba insert
|
||||||
|
#$query = "INSERT INTO pacientes (DNI)value('0')";
|
||||||
|
#echo '<pre>'; print_r($conector->nonQuery($query)); echo '</pre>';
|
||||||
|
#$query = "INSERT INTO pacientes (DNI)value('1')";
|
||||||
|
#echo '<pre>'; print_r($conector->nonQueryId($query)); echo '</pre>';
|
||||||
|
|
||||||
// # Prueba insert
|
|
||||||
// $query = "INSERT INTO pacientes (DNI)value('0')";
|
|
||||||
// echo '<pre>'; print_r($conector->nonQuery($query)); echo '</pre>';
|
|
||||||
// $query = "INSERT INTO pacientes (DNI)value('1')";
|
|
||||||
// echo '<pre>'; print_r($conector->nonQueryId($query)); echo '</pre>';
|
|
||||||
?>
|
?>
|
||||||
<!-- Space char " " -->
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<h1>Api de Prueba</h1>
|
|
||||||
<div class="divbody">
|
|
||||||
<h3>Auth - login</h3>
|
|
||||||
<code>
|
|
||||||
POST /auth</br>
|
|
||||||
{</br>
|
|
||||||
"usuario" :"", -> REQUERIDO</br>
|
|
||||||
"password": "" -> REQUERIDO</br>
|
|
||||||
}
|
|
||||||
</code>
|
|
||||||
</div>
|
|
||||||
<div class="divbody">
|
|
||||||
<h3>Pacientes</h3>
|
|
||||||
<code>
|
|
||||||
GET /pacientes?page=$numeroPagina</br>
|
|
||||||
GET /pacientes?id=$idPaciente
|
|
||||||
</code>
|
|
||||||
<code>
|
|
||||||
POST /pacientes</br>
|
|
||||||
{</br>
|
|
||||||
"nombre" : "", -> REQUERIDO</br>
|
|
||||||
"dni" : "", -> REQUERIDO</br>
|
|
||||||
"correo":"", -> REQUERIDO</br>
|
|
||||||
"codigoPostal" :"",</br>
|
|
||||||
"genero" : "",</br>
|
|
||||||
"telefono" : "",</br>
|
|
||||||
"fechaNacimiento" : "",</br>
|
|
||||||
"token" : "" -> REQUERIDO</br>
|
|
||||||
}
|
|
||||||
</code>
|
|
||||||
<code>
|
|
||||||
PUT /pacientes</br>
|
|
||||||
{</br>
|
|
||||||
"nombre" : "",</br>
|
|
||||||
"dni" : "",</br>
|
|
||||||
"correo":"",</br>
|
|
||||||
"codigoPostal" :"",</br>
|
|
||||||
"genero" : "",</br>
|
|
||||||
"telefono" : "",</br>
|
|
||||||
"fechaNacimiento" : "",</br>
|
|
||||||
"token" : "" , -> REQUERIDO</br>
|
|
||||||
"pacienteId" : "" -> REQUERIDO</br>
|
|
||||||
}
|
|
||||||
</code>
|
|
||||||
<code>
|
|
||||||
DELETE /pacientes</br>
|
|
||||||
{</br>
|
|
||||||
"token" : "", -> REQUERIDO</br>
|
|
||||||
"pacienteId" : "" -> REQUERIDO</br>
|
|
||||||
}
|
|
||||||
</code>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
@ -51,28 +51,7 @@ if ($_SERVER['REQUEST_METHOD'] == "GET"){
|
|||||||
echo json_encode($datosArray);
|
echo json_encode($datosArray);
|
||||||
|
|
||||||
} else if ($_SERVER['REQUEST_METHOD'] == "DELETE"){
|
} else if ($_SERVER['REQUEST_METHOD'] == "DELETE"){
|
||||||
|
echo "hola DELETE";
|
||||||
// recepción de datos
|
|
||||||
$headers = getallheaders();
|
|
||||||
if (isset($headers['token']) && isset($headers['pacienteid'])){
|
|
||||||
$datos_header = [
|
|
||||||
"token" => $headers["token"],
|
|
||||||
"pacienteid" => $headers["pacienteid"]
|
|
||||||
];
|
|
||||||
$datos = json_encode($datos_header);
|
|
||||||
} else {
|
|
||||||
$datos = file_get_contents("php://input");
|
|
||||||
}
|
|
||||||
// envio de datos al manejador
|
|
||||||
$datosArray = $_pacientes->delete($datos);
|
|
||||||
// devolucion de respuesta
|
|
||||||
if(isset($datosArray["result"]["error_id"])){
|
|
||||||
$responseCode = $datosArray["result"]["error_id"];
|
|
||||||
http_response_code($responseCode);
|
|
||||||
}else{
|
|
||||||
http_response_code(200);
|
|
||||||
}
|
|
||||||
echo json_encode($datosArray);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$datosArray = $_respuestas->error_405();
|
$datosArray = $_respuestas->error_405();
|
||||||
|
Loading…
Reference in New Issue
Block a user