si usas xampp, abrir la consola de windows y situarse en xampp/htdocs, luego:
instalacion:
composer create-project slim/slim-skeleton [nombre_proyecto]
en el ejemplo, nombre_proyecto es "apidemo",
entonces,la estructura del proyecto quedará asi
si estas usando xampp y creaste el proyecto en htdocs, puedes entrar a la pagina de inicio
asi, (en este ejemplo el proyecto se llama apidemo)
http://localhost/apidemo/public/
vamos a crear ahora una base de datos (por facilidad se llamará igual que el proyecto)
dentro crearemos la tablas "tasks",
para eso ejecutaremos el sgt script
CREATE TABLE IF NOT EXISTS `tasks` (
`id` int(11) NOT NULL,
`task` varchar(200) NOT NULL,
`status` tinyint(1) NOT NULL DEFAULT '1',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `tasks` ADD PRIMARY KEY (`id`);
ALTER TABLE `tasks` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
|
agregamos unos cuantos registros
INSERT INTO `tasks` (`id`, `task`, `status`, `created_at`) VALUES
(1, 'Find bugs', 1, '2016-04-10 23:50:40'),
(2, 'Review code', 1, '2016-04-10 23:50:40'),
(3, 'Fix bugs', 1, '2016-04-10 23:50:40'),
(4, 'Refactor Code', 1, '2016-04-10 23:50:40'),
(5, 'Push to prod', 1, '2016-04-10 23:50:50');
|
************
ahora configuraremos nuestra base de datos, abrimos src/settings.php
y le agregamos la sgt entrada
'db' => [
'host' => 'localhost',
'dbname' => 'apidemo',
'user' => 'root',
'pass' => ''
],
************
ahora nos queda configurar la libreria de base de datos, usamos PDO (o PHP Data Objects) que es una extensión que provee una capa de abstracción de acceso a datos para PHP
vamos a usar inyeccion de dependencias para inyectar el objeto en el container.
abrimos src/dependencies.php
y ahi agregamos
// PDO database library
$container['db'] = function ($c) {
$settings = $c->get('settings')['db'];
$pdo = new PDO("mysql:host=" . $settings['host'] . ";dbname=" . $settings['dbname'],
$settings['user'], $settings['pass']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
};
|
************
vamos a implementar las sgts llamadas de API
Method URL Action
GET /tareas Devuelve todas las tasks
GET /tarea/search/code busca las tasks que tengan la palabra 'code’ en su nombre
GET /tarea/1 devuelve la task con id == 1
POST /tareaAdd agrega una nueva task
PUT /tarea/1 actualiza una task con id == 1
DELETE /tarea/1 elimina una task con id == 1
************
vamos a implementar estas llamadas en src/routes.php
// obtiene todas las tasks
$app->get('/tareas', function ($request, $response, $args) {
$sth = $this->db->prepare("SELECT * FROM tasks ORDER BY task");
$sth->execute();
$todos = $sth->fetchAll();
return $this->response->withJson($todos);
});
|
lo llamamos asi:
http://localhost/apidemo/public/tareas
// obtiene el task con un determinado id
$app->get('/tarea/[{id}]', function ($request, $response, $args) {
$sth = $this->db->prepare("SELECT * FROM tasks WHERE id=:id");
$sth->bindParam("id", $args['id']);
$sth->execute();
$todos = $sth->fetchObject();
return $this->response->withJson($todos);
});
|
lo
llamamos asi
http://localhost/apidemo/public/tarea/2
// Search for todo with given search teram in their name
$app->get('/tareas/search/[{query}]', function ($request, $response, $args) {
$sth = $this->db->prepare("SELECT * FROM tasks WHERE UPPER(task) LIKE :query ORDER BY task");
$query = "%".$args['query']."%";
$sth->bindParam("query", $query);
$sth->execute();
$todos = $sth->fetchAll();
return $this->response->withJson($todos);
});
|
************
http://localhost/apidemo/public/tareas/search/code
************
// Add a new todo
$app->post('/tarea', function ($request, $response) {
$input = $request->getParsedBody();
$sql = "INSERT INTO tasks (task) VALUES (:task)";
$sth = $this->db->prepare($sql);
$sth->bindParam("task", $input['task']);
$sth->execute();
$input['id'] = $this->db->lastInsertId();
return $this->response->withJson($input);
});
|
para probar esto, podriamos abrir una ventana de Postman similar a la de la figura
y desde ahi hacer la llamada
http://localhost/apidemo/public/tarea
************
// DELETE a todo with given id
$app->delete('/tarea/[{id}]', function ($request, $response, $args) {
$sth = $this->db->prepare("DELETE FROM tasks WHERE id=:id");
$sth->bindParam("id", $args['id']);
$sth->execute();
$todos = $sth->fetchAll();
return $this->response->withJson($todos);
});
|
************
// Update todo with given id
$app->put('/tarea/[{id}]', function ($request, $response, $args) {
$input = $request->getParsedBody();
$sql = "UPDATE tasks SET task=:task WHERE id=:id";
$sth = $this->db->prepare($sql);
$sth->bindParam("id", $args['id']);
$sth->bindParam("task", $input['task']);
$sth->execute();
$input['id'] = $args['id'];
return $this->response->withJson($input);
});
|
Excelente Post. Gracias
ResponderEliminarMuy buen aporte, gracias por tu tiempo. Se agradece.
ResponderEliminar