API de Bandeira Tarifária aberta

A API de Bandeira Tarifária é uma ferramenta importante para quem precisa acompanhar as mudanças nas tarifas de energia elétrica no Brasil. Ela retorna informações sobre as bandeiras tarifárias e valores aplicados a cada mês, permitindo que usuários e empresas possam se programar e fazer ajustes na sua gestão de energia.

Além de ser uma única disponível e aberta, esta API é atualizada regularmente com informações precisas e confiáveis, garantindo que os usuários possam ter sempre acesso às informações mais atualizadas sobre as tarifas de energia. Isso é fundamental para que empresas e consumidores possam se planejar e evitar surpresas desagradáveis na hora de pagar suas contas de energia.

A utilização da API de Bandeira Tarifária é simples e fácil, e ela pode ser integrada com outras ferramentas e sistemas para ampliar sua funcionalidade e ajudar ainda mais na gestão da energia elétrica. Se você precisa acompanhar as mudanças nas tarifas de energia, essa é a ferramenta ideal para você.

Disponível em: https://bandeiratarifaria.julix.me/

Texto escrito automaticamente pela IA ChatGPT.

Vantagens do Spring Boot 3

O Spring Boot é uma plataforma popular para desenvolvimento de aplicações Java. A versão 3 é a mais recente e oferece uma série de vantagens em relação às versões anteriores.

Uma das principais vantagens do Spring Boot 3 é a sua facilidade de uso. Ele permite que os desenvolvedores criem aplicações de forma rápida e fácil, sem precisar se preocupar com configurações complexas ou dependências. Isso é possível graças ao uso de “starters” (pacotes prontos para uso), que facilitam a configuração de dependências e outros recursos.

Outra vantagem importante é a compatibilidade com as últimas versões do Java e do Spring Framework. O Spring Boot 3 é compatível com a versão 11 do Java e com a versão 5.2 do Spring Framework, o que permite aos desenvolvedores aproveitar as últimas funcionalidades e melhorias dessas plataformas.

Além disso, o Spring Boot 3 oferece melhorias significativas em termos de segurança e desempenho. Ele inclui recursos de segurança adicionais, como o suporte ao protocolo OAuth 2.0, e melhorias no gerenciamento de memória e no tratamento de exceções, o que garante uma maior estabilidade e escalabilidade da aplicação.

Outra vantagem é a possibilidade de trabalhar com vários bancos de dados, o Spring Boot 3 oferece suporte a bancos de dados relacionais e NoSQL, permitindo que os desenvolvedores escolham a opção que melhor atenda às suas necessidades.

Em resumo, o Spring Boot 3 é uma excelente escolha para desenvolvimento de aplicações Java, graças à sua facilidade de uso, compatibilidade com as últimas versões do Java e do Spring Framework, melhorias de segurança e desempenho, e suporte a vários bancos de dados.

Texto escrito automaticamente pela IA ChatGPT.

Resolver o erro ECONNRESET no Lens (Kubernetes IDE)

Se ao abrir a IDE Lens para Kuberners aparecer o erro “read ECONNRESET”, a solução é bem simples.

Erro no “Read ECONNRESET” Lens

Basta abrir o terminal/prompt de comando e inserir o comando abaixo para logar, realizar o login no Google Cloud, fechar e abrir o Lens.

gcloud auth login

Arrow Functions no PHP

As arrow functions tão populares no mundo JavaScript estão disponíveis no PHP a partir da versão 7.4.

Esta funcionalidade deixa a utilização de funções anônimas com uma sintaxe mais enxuta.

Deixando de blá blá blá, vamos ao código…

Abaixo uma função que multiplica um número qualquer por dois utilizando função anônima:

<?php

$multiplicar = function($valor){
    return $valor * 2;
};

echo $multiplicar(5);

// imprime 10

Agora a mesma função utilizando arrow functions:

<?php

$multiplicar = fn($valor) => $valor * 2;

echo $multiplicar(5);

// imprime 10

A função utilizou apenas uma linha e o retorno é automático, sem necessidade de utilizar o “return“.

Outra característica das arrow functions é que podem acessar variáveis do escopo externo automaticamente.

Vamos ao mesmo exemplo, porém colocando o valor de multiplicação em uma variável fora do escopo da função:

<?php

$multiplicador = 2;

$multiplicar = function($valor) use ($multiplicador){
    return $valor * $multiplicador;
};

echo $multiplicar(5);

// imprime 10

No exemplo acima foi necessário deixar explicito pelo “use” que a variável “multiplicador” seria acessada na função.

O mesmo caso com arrow functions:

<?php

$multiplicador = 2;

$multiplicar = fn($valor) => $valor * $multiplicador;

echo $multiplicar(5);

// imprime 10

Porém… apesar de ser possível acessar as variáveis de escopo esterno, não é possível modificar as variáveis dentro da função, vide o código abaixo:

<?php

$multiplicador = 2;

$multiplicar = fn($valor) => $valor * $multiplicador++;

echo $multiplicador;

// imprime 2

Isso é tudo, pessoal!

Referência:

https://www.php.net/manual/pt_BR/functions.arrow.php

Criando uma API com o CodeIgniter 4

Neste post vou mostrar como criar uma simples API Rest com o framework PHP CodeIgniter 4.

Passo 1: Criar o banco de dados

Neste exemplo criarei um banco de dados no MySQL com nome “tutorial”, para criar basta usar este comando:

CREATE DATABASE tutorial;

Também criarei uma tabela Livro neste banco de dados:

USE tutorial;

CREATE TABLE livro (
  id INT NOT NULL AUTO_INCREMENT,
  descricao VARCHAR(50) NOT NULL,
  valor DOUBLE NOT NULL,
  autor VARCHAR(20) NOT NULL,
  PRIMARY KEY(id)
);

O próximo passo é popular a tabela com alguns livros, é só rodar o código abaixo:

INSERT INTO livro (descricao, valor, autor) VALUES
('1984' , 21.01, 'George Orwell'),
('Admirável Mundo Novo' , 25.40, '‎Aldous Huxley'),
('Fahrenheit 451' , 24.51, '‎Ray Bradbury');

Passo 2: Baixar e configurar o CodeIgniter 4

Agora basta entrar no site oficial do CodeIgniter 4 (https://codeigniter.com), baixar a última versão (neste momento 4.0.4) e extrair em um diretório.

Depois disto é necessário entrar no diretório do projeto e alterar o nome do arquivo “env” para “.env”, editar este arquivo removendo os comentários das linhas abaixo e inserindo os seguintes parâmetros:

database.default.hostname = localhost
database.default.database = tutorial
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi

Lembrando que os campos de usuário e senha do banco devem estar corretos conforme configurado no MySQL da máquina.

Passo 3: Criar o Model

A próxima etapa é criar o model conforme a tabela que criei, no diretório app/Models criar um arquivo chamado LivroModel.php e inserir os seguintes códigos:

<?php namespace App\Models;
  
use CodeIgniter\Model;
  
class LivroModel extends Model
{
    protected $table = 'livro';
    protected $primaryKey = 'id';
    protected $allowedFields = ['descricao','valor', 'autor'];
    protected $validationRules    = [
        'descricao'     => 'required|max_length[50]',
        'valor'         => 'required|decimal',
        'autor'         => 'required|max_length[20]'       
    ];
}
 

Passo 4: Criar o Controller

O próximo passo é gerar o controller, no diretório app/Controllers criar o arquivo Livros.php com o código abaixo:

<?php namespace App\Controllers;
 
use CodeIgniter\RESTful\ResourceController;
use CodeIgniter\API\ResponseTrait;
use App\Models\LivroModel;
 
class Livros extends ResourceController
{
    use ResponseTrait;
    // lista todos livros
    public function index()
    {
        $model = new LivroModel();
        $data = $model->findAll();
        return $this->respond($data);
    }
 
    // lista um livro
    public function show($id = null)
    {
        $model = new LivroModel();
        $data = $model->getWhere(['id' => $id])->getResult();

        if($data){
            return $this->respond($data);
        }
        
        return $this->failNotFound('Nenhum dado encontrado com id '.$id);        
    }
 
    // adiciona um livro
    public function create()
    {
        $model = new LivroModel();
        $data = $this->request->getJSON();

        if($model->insert($data)){
            $response = [
                'status'   => 201,
                'error'    => null,
                'messages' => [
                    'success' => 'Dados salvos'
                ]
            ];
            return $this->respondCreated($response);
        }

        return $this->fail($model->errors());
    }
    
    // atualiza um livro
    public function update($id = null)
    {
        $model = new LivroModel();
        $data = $this->request->getJSON();
        
        if($model->update($id, $data)){
            $response = [
                'status'   => 200,
                'error'    => null,
                'messages' => [
                    'success' => 'Dados atualizados'
                    ]
                ];
                return $this->respond($response);
            };

            return $this->fail($model->errors());
        }
 
    // deleta um livro
    public function delete($id = null)
    {
        $model = new LivroModel();
        $data = $model->find($id);
        
        if($data){
            $model->delete($id);
            $response = [
                'status'   => 200,
                'error'    => null,
                'messages' => [
                    'success' => 'Dados removidos'
                ]
            ];
            return $this->respondDeleted($response);
        }
        
        return $this->failNotFound('Nenhum dado encontrado com id '.$id);        
    }
 
}

Abaixo uma breve explicação do funcionamento dos métodos deste controller:

index() – É usado para listar todos os livros.
create() – Este método é usado para adicionar um livro.
update() – Este é usado para alterar um livro existente.
show() – É usado para listar apenas um livro.
delete() – Este método é usado para remover um livro.

Passo 5: Configurando a rota para o endpoint

O próximo passo é criar as rotas do endpoint, para isso o CodeIgniter 4 disponibiliza o recurso Resource Routes que cria automagicamente as rotas mais usadas por um CRUD.

Para isso é só alterar a seguinte linha no arquivo Routes.php dentro da pasta app/Config:

$routes->get('/', 'Home::index');

Para esta:

$routes->resource('livros');

O framework cria as rotas com apenas essa linha, se fosse criar manualmente seria assim:

$routes->get('livros/new',             'Livros::new');
$routes->post('livros',                'Livros::create');
$routes->get('livros',                 'Livros::index');
$routes->get('livros/(:segment)',      'Livros::show/$1');
$routes->get('livros/(:segment)/edit', 'Livros::edit/$1');
$routes->put('livros/(:segment)',      'Livros::update/$1');
$routes->patch('livros/(:segment)',    'Livros::update/$1');
$routes->delete('livros/(:segment)',   'Livros::delete/$1');

Várias linhas de código a menos. 😀

Passo 6: Iniciar o servidor de desenvolvimento

Para iniciar o servidor embutido basta abrir o terminal (ou cmd), navegar até a pasta raiz do projeto e executar o comando:

php spark serve

Por padrão o servidor subirá o projeto no caminho http://localhost:8080.

Passo 6: Testando a API

A ultima etapa é testar a API com algum programa cliente de API, eu utilizarei o Postman que é um dos mais populares.

Para listar o livros basta selecionar o verbo GET e na URL colocar http://localhost:8080/livros/

Imagem mostrando o GET sendo utilizado no Postman, e retornando os dados dos livros no formato JSON.

Após clicar em “Send” será exibido o JSON com todos os livros cadastrados.

Para listar apenas um livro, é preciso editar a URL, especificando o id no final:

Imagem mostrando o GET sendo utilizado no Postman, e retornando o dado do livros no formato JSON.

Para adicionar um novo livro, basta colocar no verbo POST, apontar a URL novamente para http://localhost:8080/livros/, na aba Body especificar raw e tipo JSON, no corpo especificar os dados descricao, valor e autor conforme a imagem:

Imagem mostrando o POST sendo utilizado no Postman, enviando os dados em JSON e retornando status 200 (dados salvos).

Para alterar um livro existente, é necessário colocar o verbo PUT, colocar o id do livro existente no final da URL e no Body colocar os dados em JSON com os campos descricao, valor e autor com os novos dados:

Imagem mostrando o PUT sendo utilizado no Postman, enviando os dados alterados em JSON e retornando status 200 (dados atualizados).

E por fim, para excluir um livro, é só escolher o verbo DELETE e e especificar o id do livro a ser removido no fim da URL:

Imagem mostrando o DELETE sendo utilizado no Postman e retornando status 200 (dados removidos).

Conclusão:

Neste tutorial mostrei como criar uma simples API Restfull com o CodeIgniter 4, deixando o desenvolvimento bem rápido.

Referências:

https://codeigniter.com/user_guide/index.html

https://www.tutsmake.com/codeigniter-4-rest-api-example-tutorial/