Ir para o conteúdo

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:

Esquema do Banco de dados

A tabela que abrigou os dados dos Campus foi denominada "markers"

campi.sql
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
);

curso.sql
CREATE TABLE `curso` (
  `id` int NOT NULL,
  `nome` varchar(100) NOT NULL
)
campi_curso.sql
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;
tipo.sql
CREATE TABLE `tipo` (
  `id` int NOT NULL,
  `descricao` varchar(60) NOT NULL
)
modalidade.sql
CREATE TABLE `tipo` (
  `id` int NOT NULL,
  `descricao` varchar(60) NOT NULL
)
nivel.sql
CREATE TABLE `tipo` (
  `id` int NOT NULL,
  `descricao` varchar(60) NOT NULL
)
oferta.sql
CREATE TABLE `tipo` (
  `id` int NOT NULL,
  `descricao` varchar(60) NOT NULL
)
periodo.sql
CREATE TABLE `tipo` (
  `id` int NOT NULL,
  `descricao` varchar(60) NOT NULL
)
usuario.sql
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
)
egresso.sql
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:

markers.php
<?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);
}

}