<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NoveBytes</title>
	<atom:link href="http://novebytes.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://novebytes.com/</link>
	<description></description>
	<lastBuildDate>Fri, 08 Mar 2024 18:56:30 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>API de Bandeira Tarifária aberta</title>
		<link>https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/</link>
					<comments>https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/#comments</comments>
		
		<dc:creator><![CDATA[julix]]></dc:creator>
		<pubDate>Mon, 06 Feb 2023 18:55:17 +0000</pubDate>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[api]]></category>
		<guid isPermaLink="false">https://novebytes.com/?p=77</guid>

					<description><![CDATA[<p>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 &#8230; <a href="https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/" class="more-link">Continue lendo<span class="screen-reader-text"> "API de Bandeira Tarifária aberta"</span></a></p>
<p>O post <a href="https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/">API de Bandeira Tarifária aberta</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="683" src="https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-1024x683.jpg" alt="" class="wp-image-78" srcset="https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-1024x683.jpg 1024w, https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-300x200.jpg 300w, https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-768x512.jpg 768w, https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-1536x1024.jpg 1536w, https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-2048x1365.jpg 2048w, https://novebytes.com/wp-content/uploads/2023/02/pexels-rodolfo-clix-1036936-1200x800.jpg 1200w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>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.</p><div id="noveb-1385880886" class="noveb-2o-paragrafo noveb-entity-placement"><script type="text/javascript">
	atOptions = {
		'key' : 'a0bc8c0191d2136d09c36a200366708b',
		'format' : 'iframe',
		'height' : 60,
		'width' : 468,
		'params' : {}
	};
</script>
<script type="text/javascript" src="//www.highperformanceformat.com/a0bc8c0191d2136d09c36a200366708b/invoke.js"></script></div>



<p>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.</p>



<p>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ê.</p>



<p>Disponível em: <a href="https://bandeiratarifaria.julix.me/">https://bandeiratarifaria.julix.me/</a></p>



<p><em>Texto escrito automaticamente pela IA ChatGPT.</em></p>
<p>O post <a href="https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/">API de Bandeira Tarifária aberta</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://novebytes.com/2023/02/06/api-de-bandeira-tarifaria-aberta/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Vantagens do Spring Boot 3</title>
		<link>https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/</link>
					<comments>https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/#respond</comments>
		
		<dc:creator><![CDATA[julix]]></dc:creator>
		<pubDate>Fri, 20 Jan 2023 16:40:02 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring Boot]]></category>
		<guid isPermaLink="false">https://novebytes.com/?p=65</guid>

					<description><![CDATA[<p>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 &#8230; <a href="https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/" class="more-link">Continue lendo<span class="screen-reader-text"> "Vantagens do Spring Boot 3"</span></a></p>
<p>O post <a href="https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/">Vantagens do Spring Boot 3</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img decoding="async" width="2560" height="1920" src="https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-scaled.jpg" alt="" class="wp-image-73" srcset="https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-scaled.jpg 2560w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-300x225.jpg 300w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-1024x768.jpg 1024w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-768x576.jpg 768w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-1536x1152.jpg 1536w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-2048x1536.jpg 2048w, https://novebytes.com/wp-content/uploads/2023/01/pexels-alan-cabello-990349-edited-2-1200x900.jpg 1200w" sizes="(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px" /></figure>



<p>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.</p><div id="noveb-4172556739" class="noveb-2o-paragrafo noveb-entity-placement"><script type="text/javascript">
	atOptions = {
		'key' : 'a0bc8c0191d2136d09c36a200366708b',
		'format' : 'iframe',
		'height' : 60,
		'width' : 468,
		'params' : {}
	};
</script>
<script type="text/javascript" src="//www.highperformanceformat.com/a0bc8c0191d2136d09c36a200366708b/invoke.js"></script></div>



<p>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 &#8220;starters&#8221; (pacotes prontos para uso), que facilitam a configuração de dependências e outros recursos.</p>



<p>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.</p>



<p>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.</p>



<p>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.</p>



<p>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.</p>



<p><em>Texto escrito automaticamente pela IA ChatGPT.</em></p>
<p>O post <a href="https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/">Vantagens do Spring Boot 3</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://novebytes.com/2023/01/20/vantagens-do-spring-boot-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Resolver o erro ECONNRESET no Lens (Kubernetes IDE)</title>
		<link>https://novebytes.com/2022/10/17/resolver-o-erro-econnreset-no-lens-kubernetes-ide/</link>
					<comments>https://novebytes.com/2022/10/17/resolver-o-erro-econnreset-no-lens-kubernetes-ide/#respond</comments>
		
		<dc:creator><![CDATA[julix]]></dc:creator>
		<pubDate>Mon, 17 Oct 2022 14:55:23 +0000</pubDate>
				<category><![CDATA[Lens]]></category>
		<guid isPermaLink="false">https://novebytes.com/?p=53</guid>

					<description><![CDATA[<p>Se ao abrir a IDE Lens para Kuberners aparecer o erro &#8220;read ECONNRESET&#8221;, a solução é bem simples. 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.</p>
<p>O post <a href="https://novebytes.com/2022/10/17/resolver-o-erro-econnreset-no-lens-kubernetes-ide/">Resolver o erro ECONNRESET no Lens (Kubernetes IDE)</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Se ao abrir a IDE Lens para Kuberners aparecer o erro &#8220;read ECONNRESET&#8221;, a solução é bem simples.</p><div id="noveb-1210603862" class="noveb-2o-paragrafo noveb-entity-placement"><script type="text/javascript">
	atOptions = {
		'key' : 'a0bc8c0191d2136d09c36a200366708b',
		'format' : 'iframe',
		'height' : 60,
		'width' : 468,
		'params' : {}
	};
</script>
<script type="text/javascript" src="//www.highperformanceformat.com/a0bc8c0191d2136d09c36a200366708b/invoke.js"></script></div>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="475" height="401" src="https://novebytes.com/wp-content/uploads/2022/10/image.png" alt="" class="wp-image-54" srcset="https://novebytes.com/wp-content/uploads/2022/10/image.png 475w, https://novebytes.com/wp-content/uploads/2022/10/image-300x253.png 300w" sizes="(max-width: 475px) 85vw, 475px" /><figcaption>Erro no &#8220;Read ECONNRESET&#8221; Lens</figcaption></figure></div>



<p>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.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash line-numbers">gcloud auth login</code></pre>
<p>O post <a href="https://novebytes.com/2022/10/17/resolver-o-erro-econnreset-no-lens-kubernetes-ide/">Resolver o erro ECONNRESET no Lens (Kubernetes IDE)</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://novebytes.com/2022/10/17/resolver-o-erro-econnreset-no-lens-kubernetes-ide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arrow Functions no PHP</title>
		<link>https://novebytes.com/2020/09/20/arrow-functions-no-php/</link>
					<comments>https://novebytes.com/2020/09/20/arrow-functions-no-php/#respond</comments>
		
		<dc:creator><![CDATA[julix]]></dc:creator>
		<pubDate>Mon, 21 Sep 2020 01:10:13 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arrow functions]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://novebytes.com/?p=32</guid>

					<description><![CDATA[<p>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&#8230; Abaixo uma função que multiplica um número qualquer por dois utilizando função anônima: Agora a mesma função &#8230; <a href="https://novebytes.com/2020/09/20/arrow-functions-no-php/" class="more-link">Continue lendo<span class="screen-reader-text"> "Arrow Functions no PHP"</span></a></p>
<p>O post <a href="https://novebytes.com/2020/09/20/arrow-functions-no-php/">Arrow Functions no PHP</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As <em>arrow functions</em> tão populares no mundo JavaScript estão disponíveis no PHP a partir da versão 7.4.</p><div id="noveb-2033200682" class="noveb-2o-paragrafo noveb-entity-placement"><script type="text/javascript">
	atOptions = {
		'key' : 'a0bc8c0191d2136d09c36a200366708b',
		'format' : 'iframe',
		'height' : 60,
		'width' : 468,
		'params' : {}
	};
</script>
<script type="text/javascript" src="//www.highperformanceformat.com/a0bc8c0191d2136d09c36a200366708b/invoke.js"></script></div>



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



<p>Deixando de blá blá blá, vamos ao código&#8230;</p>



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



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php

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

echo $multiplicar(5);

// imprime 10</code></pre>



<p></p>



<p>Agora a mesma função utilizando<em> arrow functions</em>:</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php

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

echo $multiplicar(5);

// imprime 10</code></pre>



<p></p>



<p>A função utilizou apenas uma linha e o retorno é automático, sem necessidade de utilizar o &#8220;<em>return</em>&#8220;.</p>



<p>Outra característica das <em>arrow functions</em> é que podem acessar variáveis do escopo externo automaticamente.</p>



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



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php

$multiplicador = 2;

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

echo $multiplicar(5);

// imprime 10</code></pre>



<p></p>



<p>No exemplo acima foi necessário deixar explicito pelo &#8220;<em>use</em>&#8221; que a variável &#8220;multiplicador&#8221; seria acessada na função.</p>



<p>O mesmo caso com <em>arrow functions</em>:</p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php

$multiplicador = 2;

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

echo $multiplicar(5);

// imprime 10</code></pre>



<p></p>



<p>Porém&#8230; 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: </p>



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php

$multiplicador = 2;

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

echo $multiplicador;

// imprime 2</code></pre>



<p></p>



<p>Isso é tudo, pessoal!</p>



<p><strong>Referência:</strong></p>



<p><a href="https://www.php.net/manual/pt_BR/functions.arrow.php" target="_blank" rel="noreferrer noopener">https://www.php.net/manual/pt_BR/functions.arrow.php</a></p>
<p>O post <a href="https://novebytes.com/2020/09/20/arrow-functions-no-php/">Arrow Functions no PHP</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://novebytes.com/2020/09/20/arrow-functions-no-php/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Criando uma API com o CodeIgniter 4</title>
		<link>https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/</link>
					<comments>https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/#comments</comments>
		
		<dc:creator><![CDATA[julix]]></dc:creator>
		<pubDate>Tue, 01 Sep 2020 20:00:00 +0000</pubDate>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://novebytes.com/?p=6</guid>

					<description><![CDATA[<p>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 &#8220;tutorial&#8221;, para criar basta usar este comando: Também criarei uma tabela Livro neste banco de dados: O próximo passo é popular &#8230; <a href="https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/" class="more-link">Continue lendo<span class="screen-reader-text"> "Criando uma API com o CodeIgniter 4"</span></a></p>
<p>O post <a href="https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/">Criando uma API com o CodeIgniter 4</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Neste post vou mostrar como criar uma simples API Rest com o framework PHP CodeIgniter 4.</p><div id="noveb-3284706113" class="noveb-2o-paragrafo noveb-entity-placement"><script type="text/javascript">
	atOptions = {
		'key' : 'a0bc8c0191d2136d09c36a200366708b',
		'format' : 'iframe',
		'height' : 60,
		'width' : 468,
		'params' : {}
	};
</script>
<script type="text/javascript" src="//www.highperformanceformat.com/a0bc8c0191d2136d09c36a200366708b/invoke.js"></script></div>



<h2 class="wp-block-heading"><strong>Passo 1: Criar o banco de dados</strong></h2>



<p>Neste exemplo criarei um banco de dados no MySQL com nome &#8220;tutorial&#8221;, para criar basta usar este comando:</p>



<pre class="wp-block-code"><code lang="sql" class="language-sql">CREATE DATABASE tutorial;</code></pre>



<p>Também criarei uma tabela Livro neste banco de dados:</p>



<pre class="wp-block-code"><code lang="sql" class="language-sql line-numbers">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)
);</code></pre>



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



<pre class="wp-block-code"><code lang="sql" class="language-sql line-numbers">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');</code></pre>



<h2 class="wp-block-heading"><strong>Passo 2: Baixar e configurar o CodeIgniter 4</strong></h2>



<p>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.</p>



<p>Depois disto é necessário entrar no diretório do projeto e alterar o nome do arquivo &#8220;env&#8221; para &#8220;.env&#8221;, editar este arquivo removendo os comentários das linhas abaixo e inserindo os seguintes parâmetros:</p>



<pre class="wp-block-code"><code lang="vim" class="language-vim">database.default.hostname = localhost
database.default.database = tutorial
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi</code></pre>



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



<h2 class="wp-block-heading"><strong>Passo 3: Criar o Model</strong></h2>



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



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?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]'       
    ];
}
 </code></pre>



<h2 class="wp-block-heading"><strong>Passo 4: Criar o Controller</strong></h2>



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



<pre class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?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);        
    }
 
}
</code></pre>



<p>Abaixo uma breve explicação do funcionamento dos métodos deste <em>controller</em>:</p>



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



<h2 class="wp-block-heading"><strong>Passo 5: </strong>Configurando a rota para o endpoint</h2>



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



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



<pre class="wp-block-code"><code lang="php" class="language-php">$routes->get('/', 'Home::index');</code></pre>



<p>Para esta: </p>



<pre class="wp-block-code"><code lang="php" class="language-php">$routes->resource('livros');</code></pre>



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



<pre class="wp-block-code"><code lang="php" class="language-php">$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');</code></pre>



<p>Várias linhas de código a menos. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f600.png" alt="😀" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading"><strong>Passo 6: </strong>Iniciar o servidor de desenvolvimento</h2>



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



<pre class="wp-block-code"><code lang="bash" class="language-bash">php spark serve</code></pre>



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



<h2 class="wp-block-heading"><strong>Passo 6: </strong>Testando a API</h2>



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



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="607" height="556" src="https://novebytes.com/wp-content/uploads/2020/08/image.png" alt="Imagem mostrando o GET sendo utilizado no Postman, e retornando os dados dos livros no formato JSON." class="wp-image-15" srcset="https://novebytes.com/wp-content/uploads/2020/08/image.png 607w, https://novebytes.com/wp-content/uploads/2020/08/image-300x275.png 300w" sizes="auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /></figure>



<p>Após clicar em &#8220;Send&#8221; será exibido o JSON com todos os livros cadastrados.</p>



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



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="595" height="332" src="https://novebytes.com/wp-content/uploads/2020/08/image-1.png" alt="Imagem mostrando o GET sendo utilizado no Postman, e retornando o dado do livros no formato JSON." class="wp-image-16" srcset="https://novebytes.com/wp-content/uploads/2020/08/image-1.png 595w, https://novebytes.com/wp-content/uploads/2020/08/image-1-300x167.png 300w" sizes="auto, (max-width: 595px) 85vw, 595px" /></figure>



<p></p>



<p>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:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="669" height="526" src="https://novebytes.com/wp-content/uploads/2020/08/image-2.png" alt="Imagem mostrando o POST sendo utilizado no Postman, enviando os dados em JSON e retornando status 200 (dados salvos)." class="wp-image-17" srcset="https://novebytes.com/wp-content/uploads/2020/08/image-2.png 669w, https://novebytes.com/wp-content/uploads/2020/08/image-2-300x236.png 300w" sizes="auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /></figure>



<p>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:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="648" height="523" src="https://novebytes.com/wp-content/uploads/2020/08/image-3.png" alt="Imagem mostrando o PUT sendo utilizado no Postman, enviando os dados alterados em JSON e retornando status 200 (dados atualizados)." class="wp-image-18" srcset="https://novebytes.com/wp-content/uploads/2020/08/image-3.png 648w, https://novebytes.com/wp-content/uploads/2020/08/image-3-300x242.png 300w" sizes="auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /></figure>



<p>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:</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="796" height="497" src="https://novebytes.com/wp-content/uploads/2020/08/image-5.png" alt="Imagem mostrando o DELETE sendo utilizado no Postman e retornando status 200 (dados removidos)." class="wp-image-20" srcset="https://novebytes.com/wp-content/uploads/2020/08/image-5.png 796w, https://novebytes.com/wp-content/uploads/2020/08/image-5-300x187.png 300w, https://novebytes.com/wp-content/uploads/2020/08/image-5-768x480.png 768w" sizes="auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px" /></figure>



<h2 class="wp-block-heading"><strong>Conclusão:</strong></h2>



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



<h2 class="wp-block-heading"><strong>Referências:</strong></h2>



<p><a href="https://codeigniter.com/user_guide/index.html" target="_blank" rel="noreferrer noopener">https://codeigniter.com/user_guide/index.html</a></p>



<p><a href="https://www.tutsmake.com/codeigniter-4-rest-api-example-tutorial/" data-type="URL" data-id="https://www.tutsmake.com/codeigniter-4-rest-api-example-tutorial/" target="_blank" rel="noreferrer noopener">https://www.tutsmake.com/codeigniter-4-rest-api-example-tutorial/</a></p>
<p>O post <a href="https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/">Criando uma API com o CodeIgniter 4</a> apareceu primeiro em <a href="https://novebytes.com">NoveBytes</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://novebytes.com/2020/09/01/criando-uma-api-com-o-codeigniter-4/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
