API
API
API é uma sigla inglesa de Application Programming Interface - é um conjunto de rotinas e padrões estabelecidos por um software para a utilização das suas funcionalidades por aplicativos que não pretendem envolver-se em detalhes de implementação, mas apenas usar seus serviços.
Para o projeto Cartografia Digital foram colhidos dados sobre os campus do IFSP e também dos cursos do IFSP oferecidos e foi estabelecido o vínculo entre cursos e campus. Os dados foram inseridos em tabelas de banco de dados relacional. Foi utilizado o banco de dados MySQL como suporte para as tabelas e para os dados.
Detalhes sobre as tabelas no banco de dados
O modelo entidade-relacionamento das tabelas podem ser verificadas na figura abaixo:
A tabela que abrigou os dados dos Campus foi denominada "markers"
CREATE TABLE `campi` (
`id` int NOT NULL,
`nome` varchar(60) NOT NULL,
`cidade` varchar(60) NOT NULL,
`endereco` varchar(200) NOT NULL,
`latitude` float(10,6) NOT NULL,
`longitude` float(10,6) NOT NULL,
`codigo` varchar(30) NOT NULL
);
CREATE TABLE `curso` (
`id` int NOT NULL,
`nome` varchar(100) NOT NULL
)
CREATE TABLE `campi_curso` (
`id` int NOT NULL,
`id_campi` int NOT NULL,
`id_curso` int NOT NULL,
`vaga` int NOT NULL,
`nivel` int NOT NULL,
`tipo` int NOT NULL,
`eja` int NOT NULL,
`periodo` int NOT NULL,
`oferta` int NOT NULL,
`modalidade` int NOT NULL
)
ALTER TABLE `campi_curso`
ADD CONSTRAINT `fk_id_curso` FOREIGN KEY (`id_curso`) REFERENCES `curso` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
ADD CONSTRAINT `fk_id_markers` FOREIGN KEY (`id_campi`) REFERENCES `campi` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
COMMIT;
CREATE TABLE `tipo` (
`id` int NOT NULL,
`descricao` varchar(60) NOT NULL
)
CREATE TABLE `tipo` (
`id` int NOT NULL,
`descricao` varchar(60) NOT NULL
)
CREATE TABLE `tipo` (
`id` int NOT NULL,
`descricao` varchar(60) NOT NULL
)
CREATE TABLE `tipo` (
`id` int NOT NULL,
`descricao` varchar(60) NOT NULL
)
CREATE TABLE `tipo` (
`id` int NOT NULL,
`descricao` varchar(60) NOT NULL
)
CREATE TABLE `tipo` (
`id` int NOT NULL,
`usuario` varchar(30) NOT NULL,
`senha` varchar(100) NOT NULL,
`nome` varchar(80) NOT NULL,
`tipo` varchar(5) NOT NULL,
`email` varchar(80) NOT NULL
)
CREATE TABLE `tipo` (
`id_campi_curso` int NOT NULL,
`ano` YEAR NOT NULL,
`quantidade` INT NOT NULL
)
Serviços da API
Na API para fornecimento dos serviços utilizou-se a linguagem de programação PHP em conjunto com o framework CodIgniter 4. Os serviços fornecidos são os seguintes:
Para a obtenção dos Campus do IFSP:
Como resultado receberá um conjunto de dados no formato JSON com todos os dados da tabela "campi".
Para a obtenção das modalidades dos cursos:
Como resultado receberá um conjunto de dados no formato JSON com todos os dados da tabela "tipo".
Para a obtenção de cursos que pertencem a uma determinada modalidade:
- https://parabolicamara.com.br/api/public/markers/list_curso_por_tipo/{id_da_modalidade_do_curso}
Exemplo: https://parabolicamara.com.br/api/public/markers/list_curso_por_tipo/2
Como resultado receberá um conjunto de dados no formato JSON com os cursos que pertencem aquela modalidade(tipo).
Para a obtenção de cursos que pertencem a uma determinada modalidade:
- https://parabolicamara.com.br/api/public/markers/list_curso_por_tipo_campi/{id_do_campi}
Exemplo: https://parabolicamara.com.br/api/public/markers/list_curso_por_tipo_campi/2
Como resultado receberá um conjunto de dados no formato JSON com os cursos que pertencem aquele campi com modalidades(tipo).
Para a obtenção dos Campus que possuem um determinado curso(id_curso):
- https://parabolicamara.com.br/api/public/markers/get_curso/{id_do_curso}
Exemplo: https://parabolicamara.com.br/api/public/markers/get_curso/3
Como resultado recerberá um conjunto de dados no formato JSON com os Campus que possuem determinado curso.
Para a obtenção dos Cursos fornecidos por um determinado campus(id_campus):
- https://parabolicamara.com.br/api/public/markers/list_curso_por_id/{id_da_cidade}
Exemplo: https://parabolicamara.com.br/api/public/markers/list_curso_por_id/3
Como resultado recerberá um conjunto de dados no formato JSON com os cursos fornecidos por determinado Campus.
Detalhe do código php no diretório app/Controllers:
<?php
namespace App\Controllers;
use CodeIgniter\RESTful\ResourceController;
class Markers extends ResourceController{
private $markerModel;
public function __construct(){
$this->markerModel = new \App\Models\MarkersModel();
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, OPTIONS, POST, GET, PUT");
header("Access-Control-Allow-Headers: Content-Type, Content-Length, Accept-Encoding");
}
//servico para listar todos os registros de campis
public function list()
{
$data = $this->markerModel->findAll();
return $this->response->setJSON($data);
}
public function get_cursos(){
$db = \Config\Database::connect();
$sql='SELECT * FROM curso';
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
public function get_curso($id){
$db = \Config\Database::connect();
$sql='SELECT campi.*, curso.nome
FROM curso, campi_curso, campi
WHERE campi_curso.id_curso=curso.id
AND campi_curso.id_campi=campi.id
AND curso.id='.$id.'
ORDER BY campi.nome';
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
public function list_tipo(){
$db = \Config\Database::connect();
$sql='SELECT *
FROM tipo';
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
public function list_curso_por_tipo($id){
$db = \Config\Database::connect();
$sql='SELECT DISTINCT(curso.id), curso.nome, tipo.descricao
FROM campi_curso, curso, tipo
WHERE curso.id=campi_curso.id_curso
AND tipo.id=campi_curso.tipo
AND tipo.id='.$id. '
ORDER BY curso.nome';
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
public function list_curso_por_tipo_campi($id){
$db = \Config\Database::connect();
$sql='SELECT tipo.descricao, curso.id, curso.nome, campi.cidade, campi.latitude, campi.longitude
FROM curso, tipo, campi_curso, campi
WHERE campi_curso.tipo = tipo.id
AND campi.id=campi_curso.id_campi
AND curso.id=campi_curso.id_curso
AND campi_curso.tipo='.$id;
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
public function list_curso_por_id_cidade($id){
$db = \Config\Database::connect();
$sql='SELECT campi.nome as name, campi.latitude, campi.longitude, curso.nome, tipo.descricao
FROM campi, campi_curso, curso, tipo
WHERE campi.id=campi_curso.id_campi
AND curso.id=campi_curso.id_curso
AND tipo.id=campi_curso.tipo
AND campi.id='.$id;
$query = $db->query($sql);
$results = $query->getResult();
return $this->response->setJSON($results);
}
}