<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Anderson Contreira</title>
    <description>The latest articles on Forem by Anderson Contreira (@andersoncontreira).</description>
    <link>https://forem.com/andersoncontreira</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3591868%2F5e62b994-5a2d-4bd0-88d6-07916f452004.jpg</url>
      <title>Forem: Anderson Contreira</title>
      <link>https://forem.com/andersoncontreira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/andersoncontreira"/>
    <language>en</language>
    <item>
      <title>WARNING TO DEVELOPERS: A new wave of “technical test scams” is targeting devs</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Sat, 06 Dec 2025 17:36:59 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/warning-to-developers-a-new-wave-of-technical-test-scams-is-targeting-devs-4ifh</link>
      <guid>https://forem.com/andersoncontreira/warning-to-developers-a-new-wave-of-technical-test-scams-is-targeting-devs-4ifh</guid>
      <description>&lt;h1&gt;
  
  
  🚨 &lt;strong&gt;WARNING TO DEVELOPERS: A new wave of “technical test scams” is targeting devs — and it's getting more sophisticated&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Over the past few months, several developers — including myself — have been targeted by a scam involving fake technical tests sent by “recruiters.”&lt;br&gt;
People like &lt;strong&gt;Allan Lancioni&lt;/strong&gt;, &lt;strong&gt;João Pessoa&lt;/strong&gt;, and &lt;strong&gt;Muhammad Ramadhani&lt;/strong&gt; have already documented identical attacks. Their posts are MUST-read.&lt;/p&gt;

&lt;p&gt;This is not theoretical.&lt;br&gt;
&lt;strong&gt;It’s real. It’s happening now.&lt;/strong&gt;&lt;br&gt;
And yes — it &lt;em&gt;almost&lt;/em&gt; happened to me this year.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 &lt;strong&gt;How the scam works (same pattern every time):&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;A “recruiter” (sometimes pretending to be a CEO/HR) contacts you.&lt;/li&gt;
&lt;li&gt;The job looks amazing — above-market salary, remote position, paid in USD, etc.&lt;/li&gt;
&lt;li&gt;They ask for your CV and GitHub.&lt;/li&gt;
&lt;li&gt;They say you’re “approved for the next stage” without any real interview.&lt;/li&gt;
&lt;li&gt;Before the call, they send you a &lt;strong&gt;codebase to review or modify&lt;/strong&gt; as a “technical test.”&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And that’s where the attack kicks in.&lt;/p&gt;

&lt;p&gt;Running the project executes a malicious script hidden inside the dependencies, allowing remote code execution and giving the attacker access to your machine — especially to browser wallets and local credentials.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧨 &lt;strong&gt;Real cases from the community&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  👉 &lt;strong&gt;Allan Lancioni&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;He reverse-engineered an actual attack.&lt;br&gt;
The project contained scripts that enabled code injection and crypto-wallet theft.&lt;br&gt;
His post (highly recommended):&lt;br&gt;
&lt;a href="https://www.linkedin.com/pulse/como-identifiquei-um-golpe-em-teste-t%C3%A9cnico-an%C3%A1lise-real-lancioni-kcyac/" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/como-identifiquei-um-golpe-em-teste-t%C3%A9cnico-an%C3%A1lise-real-lancioni-kcyac/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  👉 &lt;strong&gt;João Pessoa&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;He received a suspicious repo as a “technical test.”&lt;br&gt;
In the package.json he found:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fs@0.0.1-security&lt;/code&gt; (placeholder inserted when a malicious package is removed)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;execp@0.0.1&lt;/code&gt; (malicious package designed to execute arbitrary commands)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;request&lt;/code&gt; (deprecated + vulnerable)&lt;/li&gt;
&lt;li&gt;A remote-code-execution script hidden in &lt;code&gt;dark.min.js&lt;/code&gt; using &lt;code&gt;atob&lt;/code&gt; + &lt;code&gt;eval&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;His post:&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/jppessoa/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/jppessoa/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  👉 &lt;strong&gt;Muhammad Ramadhani&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Received an almost identical project with the same malicious dependencies.&lt;br&gt;
His warning went viral in the Web3 community.&lt;/p&gt;

&lt;p&gt;Profile: &lt;a href="https://www.linkedin.com/in/ramadhvni/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ramadhvni/&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  ⚠️ &lt;strong&gt;And my personal case?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Yes — &lt;strong&gt;they tried this with me too&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The red flags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The company claimed to be “X”, but the recruiter used a &lt;strong&gt;gmail.com&lt;/strong&gt; address.&lt;/li&gt;
&lt;li&gt;The repo had &lt;em&gt;zero&lt;/em&gt; relation to the company name.&lt;/li&gt;
&lt;li&gt;The project involved crypto (again, same pattern).&lt;/li&gt;
&lt;li&gt;The code structure was suspicious.&lt;/li&gt;
&lt;li&gt;They pushed me to run the project before any technical call.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The repo I received:&lt;br&gt;
👉 &lt;code&gt;mega-org99/Coinpromoting_dApp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Allan even replied saying the repo he received was extremely similar:&lt;br&gt;
👉 &lt;code&gt;megaorg991/tokentradingdapp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Same structure.&lt;br&gt;
Same dependencies.&lt;br&gt;
Same modus operandi.&lt;br&gt;
Probably the &lt;strong&gt;same group&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;My intuition kicked in — and I &lt;strong&gt;dropped the process immediately&lt;/strong&gt;.&lt;br&gt;
Better to lose a “job opportunity” than compromise my machine, accounts, and data.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛡️ &lt;strong&gt;How to protect yourself (practical checklist):&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ✔️ 1. &lt;strong&gt;NEVER run &lt;code&gt;npm install&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt;, or &lt;code&gt;pip install&lt;/code&gt; on unknown projects.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Open the dependency files first.&lt;br&gt;
Look for suspicious packages, single-version modules, weird names, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 2. &lt;strong&gt;Be skeptical of any test sent &lt;em&gt;before&lt;/em&gt; a real conversation.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Scammers skip interviews — they push codebases.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 3. **Check the recruiter’s email and company domain.
&lt;/h3&gt;

&lt;p&gt;Gmail = Red Flag.**&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 4. &lt;strong&gt;Ask for a technical explanation of the project.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Scammers avoid calls.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 5. &lt;strong&gt;Use ChatGPT to analyze suspicious code.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Paste dependencies → it will flag malicious patterns instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 6. &lt;strong&gt;If an offer seems too good to be true… it probably is.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;High salary + “easy test” + no interview = scam formula.&lt;/p&gt;




&lt;h1&gt;
  
  
  🚨 &lt;strong&gt;Final reminder: This isn’t paranoia — it’s protection.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Scammers target developers because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;devs run code&lt;/li&gt;
&lt;li&gt;devs store SSH keys, API tokens, environment secrets&lt;/li&gt;
&lt;li&gt;devs often have corporate access&lt;/li&gt;
&lt;li&gt;devs trust “technical tests” too easily&lt;/li&gt;
&lt;li&gt;devs working with Web3/crypto are especially vulnerable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something feels off, &lt;strong&gt;walk away&lt;/strong&gt;.&lt;br&gt;
Your instinct is a security tool.&lt;/p&gt;

&lt;p&gt;Stay safe. Audit everything. Trust nothing blindly.&lt;/p&gt;

</description>
      <category>development</category>
      <category>scam</category>
      <category>recruiting</category>
    </item>
    <item>
      <title>ALERTA IMPORTANTE PARA DEVS: golpe em testes técnicos está crescendo - fiquem espertos</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Sat, 06 Dec 2025 17:34:56 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/alerta-importante-para-devs-golpe-em-testes-tecnicos-esta-crescendo-fiquem-espertos-hj8</link>
      <guid>https://forem.com/andersoncontreira/alerta-importante-para-devs-golpe-em-testes-tecnicos-esta-crescendo-fiquem-espertos-hj8</guid>
      <description>&lt;h1&gt;
  
  
  🚨 &lt;strong&gt;ALERTA IMPORTANTE PARA DEVS: golpe em “testes técnicos” está crescendo (e cada vez mais sofisticado)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Nos últimos meses, vários desenvolvedores — inclusive eu — têm sido alvo de um golpe envolvendo “testes técnicos” enviados por supostos recrutadores.&lt;br&gt;
Pessoas como &lt;strong&gt;Allan Lancioni&lt;/strong&gt;, &lt;strong&gt;João Pessoa&lt;/strong&gt;, e &lt;strong&gt;Muhammad Ramadhani&lt;/strong&gt; já documentaram ataques muito semelhantes. Recomendo fortemente ler os conteúdos deles também.&lt;/p&gt;

&lt;p&gt;Esse golpe não é teoria.&lt;br&gt;
&lt;strong&gt;É real. Está acontecendo agora.&lt;/strong&gt;&lt;br&gt;
E sim, &lt;em&gt;quase&lt;/em&gt; aconteceu comigo este ano.&lt;/p&gt;




&lt;h1&gt;
  
  
  🔥 &lt;strong&gt;Como o golpe funciona (sempre o mesmo padrão):&lt;/strong&gt;
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Um “recrutador” (às vezes se passando por CEO ou HR de blockchain) inicia contato.&lt;/li&gt;
&lt;li&gt;A vaga parece ótima — salário acima da média, 100% remota, pagamento em dólar etc.&lt;/li&gt;
&lt;li&gt;Ele pede seu CV e GitHub.&lt;/li&gt;
&lt;li&gt;Diz que você “passou para a próxima etapa” sem nem conversar direito.&lt;/li&gt;
&lt;li&gt;Antes da entrevista, envia uma &lt;strong&gt;codebase para você estudar ou ajustar&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;E é &lt;strong&gt;aí&lt;/strong&gt; que o ataque acontece.&lt;/p&gt;

&lt;p&gt;Ao rodar o projeto, um script malicioso dentro das dependências executa um payload remoto — permitindo invasão, roubo de dados e, especialmente, acesso a carteiras de criptomoedas instaladas no navegador.&lt;/p&gt;




&lt;h1&gt;
  
  
  🧨 &lt;strong&gt;Casos reais analisados (dos artigos citados):&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  👉 &lt;strong&gt;Allan Lancioni&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ele fez engenharia reversa completa do ataque que recebeu.&lt;br&gt;
A codebase tinha scripts escondidos que permitiam injeção de código e roubo de carteiras cripto.&lt;br&gt;
Artigo dele aqui (leitura obrigatória):&lt;br&gt;
&lt;a href="https://www.linkedin.com/pulse/como-identifiquei-um-golpe-em-teste-t%C3%A9cnico-an%C3%A1lise-real-lancioni-kcyac/" rel="noopener noreferrer"&gt;https://www.linkedin.com/pulse/como-identifiquei-um-golpe-em-teste-t%C3%A9cnico-an%C3%A1lise-real-lancioni-kcyac/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  👉 &lt;strong&gt;João Pessoa&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Recebeu um repositório suspeito como “teste técnico”.&lt;br&gt;
Ao checar o package.json, encontrou:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;fs@0.0.1-security&lt;/code&gt; (indicador de pacote removido por malícia)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;execp@0.0.1&lt;/code&gt; (pacote criado só para executar comandos arbitrários)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;request&lt;/code&gt; vulnerável&lt;/li&gt;
&lt;li&gt;Um &lt;em&gt;script de execução remota&lt;/em&gt; escondido em &lt;code&gt;dark.min.js&lt;/code&gt;, usando &lt;code&gt;atob&lt;/code&gt; + &lt;code&gt;eval&lt;/code&gt; para rodar código vindo da internet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Post original dele:&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/jppessoa/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/jppessoa/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  👉 &lt;strong&gt;Muhammad Ramadhani&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Recebeu projeto idêntico, com exatamente os mesmos pacotes maliciosos.&lt;br&gt;
Seu alerta viralizou entre devs de Web3.&lt;br&gt;
Perfil: &lt;a href="https://www.linkedin.com/in/ramadhvni/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/ramadhvni/&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  ⚠️ &lt;strong&gt;E o meu caso pessoal?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Sim, &lt;strong&gt;eu também recebi&lt;/strong&gt; essa tentativa de golpe este ano.&lt;/p&gt;

&lt;p&gt;Os sinais foram:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A empresa dizia ser “X”, mas o email do recrutador era um &lt;strong&gt;gmail.com&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;O repositório &lt;strong&gt;não tinha nada a ver&lt;/strong&gt; com o nome da empresa.&lt;/li&gt;
&lt;li&gt;O projeto era relacionado a criptomoedas (de novo, o mesmo padrão).&lt;/li&gt;
&lt;li&gt;Estrutura de código estranha.&lt;/li&gt;
&lt;li&gt;Pressa para que eu rodasse a aplicação antes de qualquer call técnica.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O repositório que recebi foi este:&lt;br&gt;
👉 &lt;code&gt;mega-org99/Coinpromoting_dApp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Quando comentei isso, o próprio Allan respondeu que o golpe dele usava outro repo semelhante:&lt;br&gt;
👉 &lt;code&gt;megaorg991/tokentradingdapp&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Mesma estrutura. Mesmo modus operandi.&lt;br&gt;
Provavelmente o &lt;em&gt;mesmo grupo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Minha intuição falou mais alto e &lt;strong&gt;abandonei o processo na hora&lt;/strong&gt;.&lt;br&gt;
Preferi perder uma “oportunidade” do que arriscar minha máquina, minhas contas e meus dados.&lt;/p&gt;




&lt;h1&gt;
  
  
  🛡️ &lt;strong&gt;Como se proteger (de forma prática):&lt;/strong&gt;
&lt;/h1&gt;

&lt;h3&gt;
  
  
  ✔️ 1. &lt;strong&gt;Nunca rode &lt;code&gt;npm install&lt;/code&gt;, &lt;code&gt;yarn&lt;/code&gt; ou &lt;code&gt;pip install&lt;/code&gt; em projetos enviados por desconhecidos.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Abra o package.json, requirements.txt, composer.json etc.&lt;br&gt;
Procure pacotes desconhecidos, versões únicas, nomes estranhos.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 2. &lt;strong&gt;Desconfie de qualquer teste enviado antes de uma call real com o recrutador.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Golpista não faz entrevista — manda “teste” direto.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 3. **Pesquise o nome do recrutador e da empresa.
&lt;/h3&gt;

&lt;p&gt;E-mail Gmail = bandeira vermelha.**&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 4. &lt;strong&gt;Peça para o entrevistador explicar o projeto em call.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Golpista foge disso.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 5. &lt;strong&gt;Lembre que ChatGPT pode ajudar.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Se você colar dependências suspeitas e pedir análise, ele aponta padrões de malware.&lt;/p&gt;

&lt;h3&gt;
  
  
  ✔️ 6. &lt;strong&gt;Se parecer bom demais… desconfie.&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Golpe perfeito começa com proposta muito acima da realidade.&lt;/p&gt;




&lt;h1&gt;
  
  
  🚨 &lt;strong&gt;Resumo final: isso não é exagero — é prevenção.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Golpistas estão mirando desenvolvedores porque:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dev roda código&lt;/li&gt;
&lt;li&gt;dev tem acesso a máquinas produtivas&lt;/li&gt;
&lt;li&gt;dev guarda tokens, SSH keys, wallets&lt;/li&gt;
&lt;li&gt;dev confia demais em “testes técnicos”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não caia nessa.&lt;/p&gt;

&lt;p&gt;Se algo parecer estranho, &lt;strong&gt;saia fora&lt;/strong&gt;.&lt;br&gt;
Seu instinto é uma ferramenta de segurança tão importante quanto seu antivírus.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>scam</category>
      <category>recruiting</category>
      <category>development</category>
    </item>
    <item>
      <title>Planejamento de carreira: ou você assume o volante, ou vira passageiro da própria vida</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Sat, 06 Dec 2025 14:47:48 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/planejamento-de-carreira-ou-voce-assume-o-volante-ou-vira-passageiro-da-propria-vida-ekg</link>
      <guid>https://forem.com/andersoncontreira/planejamento-de-carreira-ou-voce-assume-o-volante-ou-vira-passageiro-da-propria-vida-ekg</guid>
      <description>&lt;p&gt;Vamos ser sinceros e começar com uma verdade incômoda:&lt;br&gt;
&lt;strong&gt;a maioria das pessoas não planeja a própria carreira — elas apenas sobrevivem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Entram no mercado, aceitam o primeiro salário, resolvem algumas coisas básicas, pegam um financiamento aqui, outro ali… e quando percebem, a vida passou.&lt;/p&gt;

&lt;p&gt;E a frase clássica chega:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Meu Deus… já estou quase com 40. Como isso aconteceu tão rápido? Será que fiz o que deveria ter feito?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Aconteceu porque &lt;strong&gt;você não planejou&lt;/strong&gt;.&lt;br&gt;
E quando você não planeja, você vive no modo &lt;strong&gt;“vida leva eu”&lt;/strong&gt; — e esse é o caminho mais certo para estagnação e para deixar que &lt;strong&gt;alguém planeje seu futuro por você&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;1. O tempo não espera — e sua carreira também não&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A vida é implacável:&lt;br&gt;
&lt;strong&gt;ou você se move, ou ela te move.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dos 20 aos 30, você acha que tem o mundo inteiro pela frente.&lt;br&gt;
Dos 30 aos 40, você percebe que não tem tanto tempo assim.&lt;br&gt;
E depois dos 40, sua margem de erro diminui brutalmente. A pressão aumenta, e a liberdade de arriscar diminui.&lt;/p&gt;

&lt;p&gt;Independente da sua idade, se você não tem um plano, você se torna &lt;strong&gt;passageiro da própria vida&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;2. Ambição e Planejamento Pós-Primeira Chance&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Sim, eu vou falar a palavra que muita gente evita:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;mediocridade.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ter a primeira oportunidade (seja como Júnior em TI, ou Auxiliar de Vendas) é um grande passo. Mas depois que você entra, a mentalidade muda. Você precisa ter direção.&lt;/p&gt;

&lt;p&gt;Se você não sabe para onde quer ir, qualquer caminho te leva ao lugar errado.&lt;/p&gt;

&lt;p&gt;Um profissional Júnior, no mínimo, precisa ter um plano de transição para Pleno. Um Auxiliar de Vendas precisa mirar em ser Vendedor e, em seguida, Gerente. Você precisa ter uma ideia de como responder à pergunta: &lt;strong&gt;"Onde você se vê em 5 anos?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O papo de "salário mínimo, esforço mínimo" tem seu peso, mas se você adota isso como lei de vida, você se transforma em um profissional &lt;strong&gt;mediano&lt;/strong&gt;. E profissional mediano não cresce. Em lugar nenhum.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambição de crescimento é o mínimo. Falta de ambição é o caminho direto para a mediocridade.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;3. Entregar tudo e não receber nada? Então pare de insistir.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Trabalhar bem, entregar com qualidade, e até fazer um pouco além — isso é o &lt;strong&gt;básico&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mas se você faz a sua parte e percebe que a empresa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;não te reconhece,&lt;/li&gt;
&lt;li&gt;não te desenvolve,&lt;/li&gt;
&lt;li&gt;não te promove,&lt;/li&gt;
&lt;li&gt;não te valoriza…&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Então você não tem que "ter paciência". Você tem que ter &lt;strong&gt;opções&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Você não tem um emprego. Você tem um atraso na sua vida.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Lealdade é estratégia de carreira, mas seja leal com quem é leal a você. *&lt;/em&gt; A empresa é uma ferramenta. Se ela não serve mais, mude a ferramenta.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;4. O peso da vida pessoal (e por que ela congela carreiras)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Casamento, filhos, boletos, escola, casa, saúde... tudo isso muda completamente a forma como você toma decisões.&lt;/p&gt;

&lt;p&gt;É difícil, mas é real: quando a vida aperta, o instinto é &lt;strong&gt;não arriscar&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Vou ser direto (e realista):&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Se você consegue estudar, fazer faculdade, pós e inglês ANTES de formar família… faça.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Isso reduz o peso emocional e financeiro absurdamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Quando você estuda antes:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;tem mais tempo, menos preocupações e mais energia;&lt;/li&gt;
&lt;li&gt;tem mais liberdade para trocar de emprego e evoluir mais rápido;&lt;/li&gt;
&lt;li&gt;pode dedicar foco total no crescimento, com menos risco nas escolhas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Quando estuda depois de casar e ter filhos:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;o tempo é menor e o cansaço é maior;&lt;/li&gt;
&lt;li&gt;o dinheiro é mais contado e a responsabilidade aperta;&lt;/li&gt;
&lt;li&gt;o risco parece maior e as decisões precisam ser muito mais calculadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é impossível — eu jamais diria isso. Mas é &lt;strong&gt;muito, muito mais difícil&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sua carreira passa a impactar outras pessoas. Isso te trava, te deixa mais cauteloso. E, às vezes, te prende onde você não deveria estar mais.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Quanto antes você se qualificar, menos a vida vai te limitar depois.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;5. Seu Nome é Seu Ativo Mais Valioso: O Peso das Finanças.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Para ter liberdade para dar passos (mesmo que cautelosos) em sua carreira, você precisa de uma retaguarda: &lt;strong&gt;controle financeiro.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A grande maioria de nós não teve educação financeira. Tivemos que aprender na marra. Mas com tantas ferramentas e pessoas compartilhando sobre o tema, não dá mais para dar desculpas.&lt;/p&gt;

&lt;p&gt;Precisamos falar sobre a cultura da dívida. Não há mérito em se orgulhar de estar devendo, ou pior, ver dívidas caducando em 5 anos como se fosse uma conquista.&lt;/p&gt;

&lt;p&gt;A única coisa que temos que zelar é o &lt;strong&gt;nosso nome&lt;/strong&gt; e nossa reputação.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Sem dinheiro, você não compra tempo. Sem tempo, você não compra evolução.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O controle financeiro pavimenta o caminho das suas aquisições e conquistas, e te dá a &lt;strong&gt;liberdade de dizer não&lt;/strong&gt; a empregos ruins e a &lt;strong&gt;liberdade de arriscar&lt;/strong&gt; para empregos melhores.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;6. Estudos: Não é só aprender, é se manter na jornada.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Muitas áreas não precisam da faculdade para começar (como a maioria em TI). Mas o quanto antes resolver, melhor será. Para cargos de liderança, a formação formal conta — e muito.&lt;/p&gt;

&lt;p&gt;E sobre o idioma:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inglês não se aprende em três meses. É manutenção.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Eu sei o quanto um professor particular ajuda, pois a exposição contínua ao idioma, como em aulas de conversação, faz toda a diferença. Assim como nossa casa precisa de limpeza e manutenção, aulas de idiomas nos ajudam a manter as coisas em ordem.&lt;/p&gt;

&lt;p&gt;Outro ponto fundamental:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Você precisa pesquisar o caminho da sua área.&lt;/strong&gt; O que é preciso para ser Pleno? O que o mercado pede de um Sênior, Arquiteto ou Gerente? A experiência adquirida vai pavimentar o caminho, mas você precisa saber &lt;strong&gt;para onde&lt;/strong&gt; está pavimentando.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;7. Liderança: Assusta, mas paga a conta.&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Muita gente foge da liderança.Eu sei como é bom ficar só "fazendo o seu" sem se incomodar.&lt;/p&gt;

&lt;p&gt;Mas essa escolha pode te &lt;strong&gt;congelar ou atrasar&lt;/strong&gt; na sua carreira.&lt;/p&gt;

&lt;p&gt;Porque o mercado premia quem se expõe, quem resolve, quem agrega, quem ensina e quem assume responsabilidade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exposição abre portas. Fugir dela fecha.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se liderança não é para você — sem problemas.&lt;br&gt;
Mas então seja o quê?&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;Uma referência técnica, no mínimo.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;8. O Plano Prático (que realmente funciona)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Tudo isso vai exigir &lt;strong&gt;organização&lt;/strong&gt;: do tempo, do dinheiro, das prioridades e dos objetivos.&lt;/p&gt;

&lt;p&gt;E aqui vai o método simples que funciona de verdade:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📌 1. Todo fim de ano, monte sua lista do próximo ano&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Parece bobo, mas funciona mais do que você imagina. Coloque metas claras, seja na área de TI ou em qualquer outra:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estudar inglês/fazer curso;&lt;/li&gt;
&lt;li&gt;Fazer faculdade/pós/tirar certificação;&lt;/li&gt;
&lt;li&gt;Aprender tecnologia X ou Y;&lt;/li&gt;
&lt;li&gt;Juntar dinheiro/quitar dívida/antecipar financiamento;&lt;/li&gt;
&lt;li&gt;Buscar promoção/mudar de emprego;&lt;/li&gt;
&lt;li&gt;Melhorar comunicação/treinar liderança;&lt;/li&gt;
&lt;li&gt;Começar academia/ler 3 livros.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📌 2. Revise e priorize a lista ao longo do ano&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Isso te mantém no caminho, te lembra do que foi alcançado e do que precisa de mais foco.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;📌 3. Tenha uma ferramenta para gestão financeira&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Pode ser uma planilha simples ou um app. Tanto faz. O importante é saber quanto ganha, quanto gasta e quanto pode arriscar/investir.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organização + Ambição + Constância = Crescimento Real.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusão: carreira é planejamento — não sorte&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A verdade é dura, mas é real:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;O tempo passa.&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;O mercado muda.&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;A vida aperta.&lt;/strong&gt;&lt;br&gt;
👉 &lt;strong&gt;E quem não planeja… paga caro depois.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O importante é:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;não cair na zona de conforto,&lt;br&gt;
não viver no modo “vida leva eu”,&lt;br&gt;
e não deixar que a vida decida por você.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sua carreira é seu patrimônio.&lt;br&gt;
Seu nome é seu bem mais valioso.&lt;br&gt;
Sua vida é sua responsabilidade.&lt;/p&gt;

&lt;p&gt;A empresa é uma ferramenta/escada.&lt;br&gt;
&lt;strong&gt;O plano é seu.&lt;br&gt;
A jornada é sua.&lt;br&gt;
E o destino… também.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>career</category>
    </item>
    <item>
      <title>RESTful – Pílula 6 – Paginação, Filtros e Ordenação em APIs REST</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Thu, 04 Dec 2025 14:46:05 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/restful-pilula-6-paginacao-filtros-e-ordenacao-em-apis-rest-3d56</link>
      <guid>https://forem.com/andersoncontreira/restful-pilula-6-paginacao-filtros-e-ordenacao-em-apis-rest-3d56</guid>
      <description>&lt;p&gt;Conforme uma API cresce, lidar com grandes volumes de dados se torna inevitável.&lt;br&gt;
Para manter performance, organização e consistência, APIs RESTful maduras utilizam padrões bem definidos de &lt;strong&gt;paginação&lt;/strong&gt;, &lt;strong&gt;filtros&lt;/strong&gt;, &lt;strong&gt;seleção de campos (fields)&lt;/strong&gt; e &lt;strong&gt;ordenação&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esses mecanismos tornam a API mais eficiente, previsível e flexível para integrações externas.&lt;/p&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;Por que isso é importante?&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;evita respostas gigantes e lentas&lt;/li&gt;
&lt;li&gt;melhora performance do servidor e do banco&lt;/li&gt;
&lt;li&gt;reduz tráfego desnecessário&lt;/li&gt;
&lt;li&gt;aumenta a flexibilidade para consultas complexas&lt;/li&gt;
&lt;li&gt;oferece controle total para o consumidor da API&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;Paginação – Os padrões mais utilizados&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A API pode adotar mais de um padrão, mas deve manter consistência.&lt;/p&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;1. Modelo baseado em page / limit&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Requisição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?page=1&amp;amp;limit=20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta recomendada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Operation completed successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alice"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bob"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"page"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;143&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"totalPages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse é o modelo mais intuitivo e comum.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;2. Modelo baseado em offset / limit&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Requisição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?offset=0&amp;amp;limit=20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta recomendada:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Operation completed successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"offset"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alice"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bob"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;143&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Características:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;offset&lt;/code&gt; indica o deslocamento inicial&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;limit&lt;/code&gt; indica quantos registros retornar&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;count&lt;/code&gt; mostra quantos itens vieram nesta resposta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Muito utilizado em bancos SQL e sistemas que precisam navegar por índices exatos.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;3. Cursor-based pagination&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Ideal para bases muito grandes ou altamente dinâmicas.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /orders?cursor=eyJpZCI6MTB9&amp;amp;limit=20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benefícios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;evita inconsistências entre páginas&lt;/li&gt;
&lt;li&gt;escala melhor&lt;/li&gt;
&lt;li&gt;recomendado quando registros mudam com frequência&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Filtros — Consultas mais flexíveis&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Filtros permitem buscar apenas dados relevantes, sem criar endpoints específicos.&lt;/p&gt;

&lt;p&gt;Exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?status=active&amp;amp;role=admin
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filtros mais elaborados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /products?category=clothes&amp;amp;min_price=50&amp;amp;max_price=200
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Evite endpoints com lógica embutida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users/active        // não recomendado
GET /products/cheap      // não recomendado
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Seleção de campos (fields)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Permite ao cliente escolher &lt;strong&gt;quais campos&lt;/strong&gt; deseja receber, reduzindo tamanho do payload e melhorando performance.&lt;/p&gt;

&lt;p&gt;Requisição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?fields=id,name,email
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Operation completed successfully"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="s2"&gt;"fields"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Alice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"alice@example.com"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bob@example.com"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"meta"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"offset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"limit"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;143&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Validação do fields&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A API deve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;impedir retorno de campos inexistentes&lt;/li&gt;
&lt;li&gt;bloquear campos privados ou sensíveis&lt;/li&gt;
&lt;li&gt;padronizar erros quando parâmetros inválidos forem enviados&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Erro recomendado para campos inválidos&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A API deve retornar erro claro, consistente e seguro quando o cliente pedir um campo inexistente ou proibido.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"label"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"INVALID_FIELD_ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Invalid field in 'fields' parameter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"fields"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allowed fields are: id, name, email, created_at"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Traceback (most recent call last):&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  File &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/usr/local/lib/python3.9/site-packages/flask/app.py&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;, line 2447, in wsgi_app&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    response = self.full_dispatch_request()&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  File &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/usr/local/lib/python3.9/site-packages/flask/app.py&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;, line 1952, in full_dispatch_request&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    rv = self.handle_user_exception(e)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  File &lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;/app/src/controllers/user_controller.py&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;, line 45, in get_users&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    raise InvalidFieldException(invalid_fields=['password'], allowed_fields=['id', 'name', 'email', 'created_at'])&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;exceptions.InvalidFieldException: Invalid field 'password' not in allowed fields (id, name, email, created_at)"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Notas importantes sobre segurança e padronização&lt;/strong&gt;
&lt;/h1&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Sobre o código interno (code = 32)&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ele complementa o status HTTP (neste caso, 400).&lt;/li&gt;
&lt;li&gt;Toda API madura mantém uma tabela de códigos internos padronizados.&lt;/li&gt;
&lt;li&gt;Facilita debugging, monitoramento, suporte e internacionalização.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Sobre o label&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A &lt;code&gt;label&lt;/code&gt; é a chave mais importante para o frontend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;é estável&lt;/li&gt;
&lt;li&gt;é semântica&lt;/li&gt;
&lt;li&gt;permite mapeamento para diferentes idiomas&lt;/li&gt;
&lt;li&gt;possibilita UX customizada em cada aplicativo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo de mapeamento frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;INVALID_FIELD_ERROR&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;en&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid field.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Campo inválido.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Campo inválido.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Sobre o campo trace&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;nunca deve ser exposto em produção&lt;/li&gt;
&lt;li&gt;útil apenas em logs internos ou dev mode&lt;/li&gt;
&lt;li&gt;stack traces expostos aumentam superfície de ataque&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Sobre o campo details&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;deve ajudar a entender o erro&lt;/li&gt;
&lt;li&gt;sem expor lógica interna, queries, tabelas, caminhos de arquivo&lt;/li&gt;
&lt;li&gt;mensagens simples como “Allowed fields are…” são aceitáveis&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Ordenação (sorting)&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A API pode adotar dois padrões amplamente aceitos.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;1. Padrão com prefixo "-"&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?sort=created_at
GET /users?sort=-created_at
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;field&lt;/code&gt; → ordem crescente&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-field&lt;/code&gt; → ordem decrescente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simples e muito comum.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. Padrão sort + order_by (mais explícito)&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /users?sort=name&amp;amp;order_by=ASC
GET /users?sort=name&amp;amp;order_by=DESC
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vantagens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mais claro&lt;/li&gt;
&lt;li&gt;amigável ao consumidor&lt;/li&gt;
&lt;li&gt;fácil de validar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /products?sort=price&amp;amp;order_by=ASC
GET /products?sort=created_at&amp;amp;order_by=DESC
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ambos os padrões são válidos; escolha um e mantenha consistência.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Combinando tudo em uma única consulta&lt;/strong&gt;
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /orders?status=paid&amp;amp;sort=created_at&amp;amp;order_by=DESC&amp;amp;offset=20&amp;amp;limit=20&amp;amp;fields=id,amount,currency,created_at
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Boas práticas gerais&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;mantenha consistência em toda a API&lt;/li&gt;
&lt;li&gt;documente filtros, campos e ordenação suportados&lt;/li&gt;
&lt;li&gt;evite endpoints com lógica embutida&lt;/li&gt;
&lt;li&gt;sempre valide campos em &lt;code&gt;fields&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;nunca exponha stack traces em ambiente produtivo&lt;/li&gt;
&lt;li&gt;considere cursor pagination para bases muito grandes&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Resumo&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Paginação evita sobrecarga e melhora performance&lt;/li&gt;
&lt;li&gt;Page/limit e offset/limit são válidos&lt;/li&gt;
&lt;li&gt;Cursor pagination é excelente para grandes volumes&lt;/li&gt;
&lt;li&gt;Filtros trazem flexibilidade&lt;/li&gt;
&lt;li&gt;Seleção de campos ajuda na performance e organização&lt;/li&gt;
&lt;li&gt;Ordenação pode ser prefixada (&lt;code&gt;-created_at&lt;/code&gt;) ou explícita (&lt;code&gt;order_by=ASC&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Erros devem ser padronizados com &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;label&lt;/code&gt;, &lt;code&gt;message&lt;/code&gt;, &lt;code&gt;params&lt;/code&gt;, &lt;code&gt;details&lt;/code&gt; e controle seguro de &lt;code&gt;trace&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>rest</category>
    </item>
    <item>
      <title>Don’t Limit Yourself: Why Broadening Your Tech Horizons Keeps You Relevant</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Wed, 03 Dec 2025 00:36:48 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/dont-limit-yourself-why-broadening-your-tech-horizons-keeps-you-relevant-51dn</link>
      <guid>https://forem.com/andersoncontreira/dont-limit-yourself-why-broadening-your-tech-horizons-keeps-you-relevant-51dn</guid>
      <description>&lt;p&gt;If there is one thing time has taught me working in IT, it is this: getting stuck with what you already know is the fastest path to being left behind.&lt;/p&gt;

&lt;p&gt;Our field evolves constantly. You do not need to learn something new every month, but you should widen your possibilities. Learning new languages, frameworks, tools or paradigms expands your technical vision and makes you more versatile to solve real problems.&lt;/p&gt;

&lt;p&gt;It is even better when your company gives you freedom to experiment with new technologies, as long as it does not turn into chaos.&lt;/p&gt;

&lt;p&gt;Choosing technology is not about what seems cool, but about what makes sense for the context of the project. In your personal projects, explore without fear because that is where real growth happens.&lt;/p&gt;

&lt;p&gt;If I were to recommend a set of technologies today for someone looking for greater opportunities in the market, I would start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript or TypeScript&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only order here is their learning curve. JavaScript and TypeScript are easier to begin with, and Java demands more structure and discipline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why “Don’t Limit Yourself” Matters More Than Ever
&lt;/h2&gt;

&lt;p&gt;In today’s tech world, versatility is a major advantage. The boundaries between roles such as back end, front end, DevOps, data and machine learning are increasingly blurry. Companies value professionals who can navigate across layers and contribute in various ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  From Coding to DevOps
&lt;/h3&gt;

&lt;p&gt;Knowing a programming language is not enough anymore. Understanding infrastructure, deployment pipelines, continuous integration and continuous delivery, containerization and cloud services under the umbrella of DevOps can make a huge difference. DevOps is not just a set of tools. It is a culture that merges development and operations to speed up delivery and improve collaboration.&lt;/p&gt;

&lt;p&gt;A developer who also understands DevOps helps their team to deliver faster and keep systems stable. That ability alone sets you apart.&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding Machine Learning to Your Toolbox
&lt;/h3&gt;

&lt;p&gt;If you expand your knowledge into Machine Learning, you unlock opportunities in data-driven features, automation, personalization, predictive systems and more. Machine Learning is no longer something optional. It is increasingly part of mainstream products and systems.&lt;/p&gt;

&lt;p&gt;Combining a background in software development with ML and applying MLOps practices for deploying and maintaining ML models can make you a highly desirable professional for companies building modern, data-intensive applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Front End, Back End, Databases, Full Stack or All of the Above
&lt;/h3&gt;

&lt;p&gt;Knowing only one side of the stack is a limitation. If you also study front end frameworks, UI and UX basics, how to design APIs and especially learn about databases, both SQL and NoSQL, and their best use cases, you become much more prepared to tackle real-world challenges end to end.&lt;/p&gt;

&lt;p&gt;A well chosen database strategy makes a big difference in scalability, performance and maintainability. Understanding when to use relational databases, when to go for document stores and when caching or indexing makes sense can separate a good system from a fragile one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Expand Your Skills Without Losing Focus
&lt;/h2&gt;

&lt;p&gt;Here are some ideas to explore beyond your main stack, while keeping your learning structured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose one complementary domain at a time such as DevOps, ML, front end, database or security, and study the basics seriously.&lt;/li&gt;
&lt;li&gt;Build small personal projects to apply what you learned because hands-on experience is irreplaceable.&lt;/li&gt;
&lt;li&gt;Combine disciplines by building a simple project that touches full stack, DevOps and ML. The learning multiplies.&lt;/li&gt;
&lt;li&gt;Keep code, infrastructure and machine learning clean and maintainable because good practices matter everywhere.&lt;/li&gt;
&lt;li&gt;Stay curious, but do not spread yourself too thin. Aim for depth in a few domains rather than superficial knowledge in many.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;In a world where technology evolves rapidly, it is no longer enough to be a specialist in one language or framework. Versatility, continuous learning and willingness to cross boundaries make you stand out.&lt;/p&gt;

&lt;p&gt;Embrace DevOps, explore Machine Learning, understand front end and back end, dive into databases. Expand your toolbox with intention, build holistic knowledge and become the kind of professional who adapts, learns and leads.&lt;/p&gt;

&lt;p&gt;Do not limit yourself. Learning is what keeps you relevant&lt;/p&gt;

</description>
      <category>career</category>
    </item>
    <item>
      <title>Por que o plano de carreira virou exceção, e como isso afeta a entrada de novos profissionais no mercado</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Tue, 02 Dec 2025 21:00:49 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/por-que-o-plano-de-carreira-virou-excecao-e-como-isso-afeta-a-entrada-de-novos-profissionais-no-1i7c</link>
      <guid>https://forem.com/andersoncontreira/por-que-o-plano-de-carreira-virou-excecao-e-como-isso-afeta-a-entrada-de-novos-profissionais-no-1i7c</guid>
      <description>&lt;p&gt;O mercado de TI passou por transformações profundas nos últimos anos. Uma das mais evidentes é a dificuldade crescente que profissionais em início de carreira têm enfrentado para conseguir sua primeira oportunidade. Isso não acontece de forma isolada; existe um conjunto de fatores que explica por que as empresas estão mais resistentes em contratar e desenvolver novos talentos.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A permanência nas empresas mudou&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Durante muito tempo era comum que pessoas construíssem grande parte da sua trajetória profissional em um único lugar. Hoje, essa realidade mudou completamente. Profissionais permanecem cada vez menos tempo em uma empresa; existe uma tendência dos profissionais buscarem uma nova oportunidade em até três anos; entre os mais jovens esse período costuma não chegar a um ano.&lt;/p&gt;

&lt;p&gt;Para as empresas, isso cria um dilema. Desenvolver um profissional iniciante demanda investimento, mentoria, direcionamento e a curva de aprendizagem das tecnologias. Muitas vezes, esse investimento só começa a gerar retorno após um ano,e muitas vezes é quando o colaborador já está prestes a sair. Como consequência, a empresa fica mais cautelosa e passa a priorizar contratações de profissionais mais experientes, que entregam impacto imediato.&lt;/p&gt;

&lt;p&gt;E existe outro elemento importante: &lt;strong&gt;o salário&lt;/strong&gt;. No mercado de TI é amplamente conhecido que trocar de empresa costuma gerar um ganho financeiro real; muitos conseguem aumentos de 15% a 20%. Já os reajustes internos por reconhecimento dificilmente passam de 8% a 10%. As promoções podem ser um pouco melhores, mas nem sempre a mesma vem da forma esperada. Essa diferença incentiva a busca por oportunidades externas e contribui para o ciclo de alta rotatividade. O resultado é simples: as empresas investem menos porque as pessoas saem rápido, e as pessoas saem rápido porque as empresas investem pouco.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Automação elevou ainda mais a exigência para quem está começando&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Tarefas que antes eram delegadas a profissionais em início de carreira hoje podem ser automatizadas por ferramentas de IA, plataformas low-code e soluções que aceleram o desenvolvimento. Com isso, as empresas passaram a focar em perfis mais completos, plenos e seniors capazes de entregar autonomia desde o primeiro dia.&lt;/p&gt;

&lt;p&gt;O efeito final é uma barreira real de entrada para quem está começando. Um ciclo que restringe oportunidades e diminui a renovação natural do mercado.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Dentro das empresas, o problema continua: falta estrutura de crescimento&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mesmo quando olhamos para organizações que possuem plano de carreira, os problemas persistem.&lt;/p&gt;

&lt;p&gt;Algumas empresas simplesmente não têm estrutura alguma. Outras até possuem algo no papel, mas executam de forma confusa ou pouco transparente. Pouquíssimas realmente fazem esse processo funcionar como deveria.&lt;/p&gt;

&lt;p&gt;Ao longo da minha trajetória, vivenciei três contextos onde o plano de carreira existia formalmente. No entanto, um deles era extremamente complexo de interpretar. Ferramentas como 9-Box, por exemplo, eram utilizadas sem clareza nos critérios. Isso tornava o processo cansativo, frustrante e inconsistente. Ainda assim, houve reconhecimento financeiro, mas a promoção exigia muito mais do que parecia razoável.&lt;/p&gt;

&lt;p&gt;Essa falta de clareza se agrava quando a empresa não possui metodologias de acompanhamento estruturadas, como:&lt;/p&gt;

&lt;p&gt;• &lt;strong&gt;1:1 periódicos&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;Avaliações 360°&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;Modelos como 9-Box&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;Frameworks claros de competência&lt;/strong&gt;&lt;br&gt;
• &lt;strong&gt;Feedback contínuo e rastreável&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sem isso, o profissional fica no escuro. Sem direção, sem mapa, sem entender o que precisa evoluir e sem confiança de que seu esforço vai gerar crescimento.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;O impacto humano — e a barreira invisível que desencoraja talentos&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Muitos profissionais com potencial acabam desistindo antes mesmo de começarem sua jornada. A barreira de entrada se tornou tão alta que vagas que deveriam ser de formação exigem experiência de um ou dois anos, algo que simplesmente não faz sentido para alguém tentando iniciar a carreira.&lt;/p&gt;

&lt;p&gt;Essa régua elevada, combinada com falta de orientação e processos internos frágeis, gera um ambiente onde muita gente só quer uma oportunidade, mas se vê presa em um ciclo de “falta experiência, mas precisa de experiência para conseguir experiência”.&lt;/p&gt;

&lt;p&gt;Sem alternativas claras, muitos acabam migrando para outras áreas por puro esgotamento.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ainda assim, investir em novos talentos continua sendo estratégico&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Apesar de todo o cenário acima, existe uma verdade inegável: &lt;strong&gt;as empresas que desejam longevidade precisam continuamente formar novos profissionais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;• Pessoas que estão começando absorvem conhecimento muito rápido&lt;br&gt;
• Mentoria cria cultura, fortalece times e garante sucessão&lt;br&gt;
• Equipes com níveis diferentes de experiência são mais saudáveis&lt;br&gt;
• Talentos iniciantes renovam ideias, energia e visão&lt;br&gt;
• Sem novos profissionais, cria-se um risco real de “apagão de talentos” no futuro&lt;/p&gt;

&lt;p&gt;Manter uma proporção saudável de profissionais iniciantes não deveria ser visto como custo, mas como estratégia de continuidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;E agora?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Não existe solução simples para esse tema. Ele envolve empresas, educação, políticas de mercado e mentalidade coletiva. Mas existe um ponto de partida: reconhecer o problema.&lt;/p&gt;

&lt;p&gt;Empresas precisam repensar sua estratégia de desenvolvimento. Profissionais precisam aprender a identificar ambientes saudáveis. E o mercado como um todo precisa equilibrar tecnologia, eficiência e pessoas.&lt;/p&gt;

&lt;p&gt;Se nenhuma mudança acontecer agora, no futuro a preocupação não será falta de frameworks, ferramentas ou IA. Será falta de gente preparada para construir o que vem pela frente.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>career</category>
    </item>
    <item>
      <title>Quando a empresa prefere contratar alguém de fora em vez de promover quem já está dentro</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Mon, 01 Dec 2025 18:11:11 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/quando-a-empresa-prefere-contratar-alguem-de-fora-em-vez-de-promover-quem-ja-esta-dentro-4c7m</link>
      <guid>https://forem.com/andersoncontreira/quando-a-empresa-prefere-contratar-alguem-de-fora-em-vez-de-promover-quem-ja-esta-dentro-4c7m</guid>
      <description>&lt;p&gt;Falar sobre carreira é, inevitavelmente, falar sobre motivação. E poucas coisas desmotivam tanto um time quanto ver a empresa buscando alguém de fora para uma posição que poderia, e deveria, ser preenchida internamente.&lt;/p&gt;

&lt;p&gt;Sim, existem casos em que faz todo sentido trazer alguém novo. Eu já vi isso acontecer. Em uma empresa onde trabalhei, a chegada de um novo gestor de RH foi um divisor de águas. A cultura mudou, processos amadureceram e até a estrutura de Business Partners foi criada. Ali, contratar alguém de fora foi estratégico e necessário.&lt;/p&gt;

&lt;p&gt;Mas nem sempre é esse o cenário.&lt;/p&gt;

&lt;p&gt;Em outras situações, a empresa tem profissionais competentes, comprometidos e culturalmente alinhados, mas prefere ignorá-los. E aí nasce o problema: como manter a motivação de quem já está entregando valor, mas não é visto como opção?&lt;/p&gt;

&lt;p&gt;Essa postura corrói o clima, afeta a confiança e, muitas vezes, acelera a saída de talentos que estavam prontos para dar o próximo passo.&lt;/p&gt;

&lt;p&gt;E existe um outro lado dessa moeda: a resistência a permitir movimentos internos reais.&lt;/p&gt;

&lt;p&gt;Já vi (e vivi) situações como pessoas querendo migrar de desenvolvimento para DevOps, mas encontrando barreiras invisíveis. Gestores que não enxergam valor em papéis como Arquitetura e acabam impedindo o crescimento natural do time. Estruturas engessadas onde mudar de área significa quase começar do zero. E a pior situação: propostas indecentes para quem quer migrar de carreira, como sair da empresa e voltar como júnior, com salário menor, porque a área não quer manter o mesmo nível. Sim. Aconteceu comigo. E acontece com muita gente.&lt;/p&gt;

&lt;p&gt;E aqui vai um ponto essencial: se não é estratégico promover alguém naquele momento, o mínimo é dar feedback, reconhecimento e direcionamento.&lt;/p&gt;

&lt;p&gt;Mesmo que a promoção não seja possível agora, existem outras formas de valorizar quem está ali. Ajuste salarial coerente com a performance. Indicação clara de caminhos de crescimento. Orientação concreta, como “faça esse curso”, “tire essa certificação”, “faça uma pós em X ou Y”. Mostrar que existe um plano e que existe futuro.&lt;/p&gt;

&lt;p&gt;Quando isso não existe, a mensagem fica clara: faça o que fizer, nada vai mudar.&lt;/p&gt;

&lt;p&gt;Aí o gestor se surpreende com o turnover. Reclama da perda de talentos. Questiona por que gente boa sai tão rápido. Mas a resposta estava na cultura que ele mesmo ajudou a construir.&lt;/p&gt;

&lt;p&gt;E reforço aqui que trazer alguém de fora pode ser importante e estratégico por vários motivos. O problema não é contratar. O problema é esquecer quem já está na luta todos os dias.&lt;/p&gt;

&lt;p&gt;Reconhecer é barato. Motivar é inteligente. Perder talento é o custo mais alto de todos.&lt;/p&gt;

&lt;p&gt;E você? Já passou por isso ou viu acontecer de perto?&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>career</category>
    </item>
    <item>
      <title>Quick tip for anyone building a career in Tech</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Sun, 30 Nov 2025 15:56:58 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/quick-tip-for-anyone-building-a-career-in-tech-34on</link>
      <guid>https://forem.com/andersoncontreira/quick-tip-for-anyone-building-a-career-in-tech-34on</guid>
      <description>&lt;p&gt;If you’re growing in the tech field, make sure you have &lt;strong&gt;public and relevant projects&lt;/strong&gt; on your GitHub.&lt;/p&gt;

&lt;p&gt;And when I say “relevant,” I’m not talking about complex enterprise systems —&lt;br&gt;&lt;br&gt;
&lt;strong&gt;complete study projects are perfectly fine&lt;/strong&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Well-structured APIs
&lt;/li&gt;
&lt;li&gt;Functional frontend applications
&lt;/li&gt;
&lt;li&gt;Small full-stack apps
&lt;/li&gt;
&lt;li&gt;Tools that solve real problems
&lt;/li&gt;
&lt;li&gt;Project templates and boilerplates
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words: something that shows &lt;strong&gt;your technical maturity&lt;/strong&gt;, not just random bootcamp exercises or generic CRUDs thrown together.&lt;/p&gt;




&lt;h2&gt;
  
  
  These projects help recruiters and tech leads understand:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;How you structure an application
&lt;/li&gt;
&lt;li&gt;Your architectural thinking
&lt;/li&gt;
&lt;li&gt;Whether you apply industry best practices
&lt;/li&gt;
&lt;li&gt;Your awareness of security
&lt;/li&gt;
&lt;li&gt;Your ability to document your work
&lt;/li&gt;
&lt;li&gt;Code clarity and consistency
&lt;/li&gt;
&lt;li&gt;How you make technical decisions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I used to review candidates, I checked all of this.&lt;br&gt;&lt;br&gt;
And professionals who ignored these details &lt;strong&gt;lost points in the evaluation&lt;/strong&gt;, even if they were technically strong.&lt;/p&gt;




&lt;h2&gt;
  
  
  “But AI can generate all the code now.”
&lt;/h2&gt;

&lt;p&gt;Yes, AI helps a lot.&lt;/p&gt;

&lt;p&gt;But here are two important truths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) AI will not do everything for you&lt;/strong&gt; — especially when it comes to deep understanding, technical reasoning, and decision-making.&lt;br&gt;&lt;br&gt;
Not to mention the situations where AI generates way more code than necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) It’s easy to spot AI-generated code that wasn’t reviewed&lt;/strong&gt;, or when a developer can’t explain what they built.&lt;br&gt;&lt;br&gt;
And let’s be honest: even &lt;em&gt;before&lt;/em&gt; AI, many people were copying code or entire projects without understanding them.&lt;/p&gt;

&lt;p&gt;The problem is &lt;strong&gt;not using AI&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
The problem is using it without reviewing, without understanding, and without developing real critical thinking.&lt;/p&gt;




&lt;h2&gt;
  
  
  If you want to stand out:
&lt;/h2&gt;

&lt;p&gt;👉 publish complete, meaningful projects&lt;br&gt;&lt;br&gt;
👉 review your code (AI-generated or not)&lt;br&gt;&lt;br&gt;
👉 demonstrate technical maturity in practice&lt;br&gt;&lt;br&gt;
👉 build a portfolio that truly represents your skills  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trust me: it makes a huge difference.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>development</category>
    </item>
    <item>
      <title>Dica rápida para quem está construindo carreira em TI</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Sun, 30 Nov 2025 15:54:42 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/dica-rapida-para-quem-esta-construindo-carreira-em-ti-4c17</link>
      <guid>https://forem.com/andersoncontreira/dica-rapida-para-quem-esta-construindo-carreira-em-ti-4c17</guid>
      <description>&lt;p&gt;Pessoal, deixem &lt;strong&gt;projetos públicos e relevantes&lt;/strong&gt; no GitHub de vocês.&lt;/p&gt;

&lt;p&gt;E quando eu falo “relevantes”, não significa que precisam ser sistemas complexos — &lt;strong&gt;projetos de estudo completos também valem&lt;/strong&gt;, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;APIs bem estruturadas&lt;/li&gt;
&lt;li&gt;Frontends funcionais&lt;/li&gt;
&lt;li&gt;Pequenas aplicações full stack&lt;/li&gt;
&lt;li&gt;Ferramentas que resolvem um problema real&lt;/li&gt;
&lt;li&gt;Templates de projetos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja: algo que mostre &lt;strong&gt;seu nível técnico&lt;/strong&gt;, e não apenas exercícios soltos de bootcamp ou CRUDs genéricos.&lt;/p&gt;




&lt;h2&gt;
  
  
  Esses projetos ajudam recrutadores e líderes técnicos a entender:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Como você organiza uma aplicação
&lt;/li&gt;
&lt;li&gt;Sua visão de arquitetura
&lt;/li&gt;
&lt;li&gt;Se aplica boas práticas de mercado
&lt;/li&gt;
&lt;li&gt;Seu cuidado com segurança
&lt;/li&gt;
&lt;li&gt;Sua capacidade de documentar
&lt;/li&gt;
&lt;li&gt;Clareza e consistência no código
&lt;/li&gt;
&lt;li&gt;Como você toma decisões técnicas
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quando eu avaliava perfis para contratar, eu olhava tudo isso.&lt;br&gt;&lt;br&gt;
E profissionais que ignoravam esses detalhes &lt;strong&gt;perdiam pontos na avaliação&lt;/strong&gt;, mesmo sendo bons.&lt;/p&gt;




&lt;h2&gt;
  
  
  “Ah, mas hoje a IA faz tudo.”
&lt;/h2&gt;

&lt;p&gt;Sim, a IA ajuda muito.&lt;/p&gt;

&lt;p&gt;Mas existem duas verdades importantes aqui:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) A IA não faz tudo por você&lt;/strong&gt;: principalmente aquilo que exige entendimento profundo e decisões técnicas — fora quando ela gera muito mais código do que o necessário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) É fácil perceber quando o código foi gerado e não revisado&lt;/strong&gt;, quando o dev não entende o que entregou ou não sabe explicar suas escolhas.&lt;br&gt;&lt;br&gt;
E vale lembrar: &lt;em&gt;antes da IA isso já acontecia&lt;/em&gt;, com profissionais copiando projetos inteiros, copiando lógica de outros repositórios e simplesmente encaixando isso no próprio código.&lt;/p&gt;

&lt;p&gt;O problema &lt;strong&gt;não é usar IA&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
O problema é usar sem revisar, sem entender e sem desenvolver pensamento crítico.&lt;/p&gt;




&lt;h2&gt;
  
  
  Se você quer se destacar:
&lt;/h2&gt;

&lt;p&gt;👉 publique projetos completos&lt;br&gt;&lt;br&gt;
👉 revise seu código (humano ou gerado por IA)&lt;br&gt;&lt;br&gt;
👉 demonstre maturidade técnica na prática&lt;br&gt;&lt;br&gt;
👉 construa um portfólio que represente quem você realmente é  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Acredite: isso faz diferença — e muita.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>development</category>
      <category>career</category>
    </item>
    <item>
      <title>Finding Balance in Architectural Decisions</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Fri, 28 Nov 2025 22:38:06 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/finding-balance-in-architectural-decisions-1912</link>
      <guid>https://forem.com/andersoncontreira/finding-balance-in-architectural-decisions-1912</guid>
      <description>&lt;p&gt;In software projects, not every decision needs a full-blown architectural committee or a 30-page design document. But the opposite is also true: some decisions are too important to be treated as a simple quick fix.&lt;/p&gt;

&lt;p&gt;Every engineering team faces moments where they need to choose between doing something the right way or doing something fast. In Brazil, we often call the fast solution a gambiarra or puxadinho, an improvised workaround that solves the problem for now but usually comes with long-term costs. In English, the closest terms would be a patch, hacky fix, temporary workaround, or band-aid solution.&lt;/p&gt;

&lt;p&gt;And the reality is: sometimes you do need a quick workaround to move forward. Deadlines exist, business pressure is real, and teams often need short-term progress. The problem starts when these quick fixes become the foundation of the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not Every Decision Needs Heavy Architecture
&lt;/h2&gt;

&lt;p&gt;But some absolutely do.&lt;/p&gt;

&lt;p&gt;Good architects and senior engineers know how to find this balance. They know when something can be done fast and when it needs a more structured approach. They ask questions like:&lt;/p&gt;

&lt;p&gt;Is this decision easy or painful to reverse later?&lt;br&gt;
Will this create technical debt that affects core flows?&lt;br&gt;
Are we introducing hidden coupling that will slow us down?&lt;br&gt;
Is this a workaround, or are we building a long-term solution?&lt;/p&gt;

&lt;p&gt;This balance is what separates sustainable architecture from a collection of short-lived patches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workarounds Have a Purpose, but They Also Have a Cost
&lt;/h2&gt;

&lt;p&gt;A workaround can help the product move forward, validate an idea, or unblock a team. The issue is that workarounds tend to accumulate quietly. One temporary decision becomes another. That small puxadinho added today becomes tomorrow’s bottleneck.&lt;/p&gt;

&lt;p&gt;Over time, the system becomes fragile, harder to test, difficult to refactor, and resistant to change. What was once a shortcut becomes a long-term liability.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Make Better Architectural Decisions
&lt;/h2&gt;

&lt;p&gt;You don’t need to over-engineer everything. But you do need awareness, intention, and clarity. Some principles help:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Understand what is hard to change.&lt;br&gt;
Database schemas, communication patterns, module boundaries, and API contracts deserve careful thought.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep documented trade-offs.&lt;br&gt;
Tools like ADRs (Architecture Decision Records) help future teams understand why a decision was made.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Separate workarounds from architecture.&lt;br&gt;
A workaround should always be labeled, documented, and revisited later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Design for adaptability.&lt;br&gt;
Loosely coupled components, clear interfaces, and simple boundaries reduce long-term pain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consider the business context.&lt;br&gt;
Sometimes the right decision is the fast one, as long as everyone understands the cost.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Architecture is not about choosing the perfect pattern or technology. It is about balance, trade-offs, timing, and intention. It is knowing when a gambiarra is enough to move forward and when it is time to slow down and build the right foundation.&lt;/p&gt;

&lt;p&gt;In the end, architecture is a continuous conversation, not a single decision. The systems we build reflect the choices we make along the way. Make them intentionally.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>development</category>
    </item>
    <item>
      <title>RESTful – Pílula 5 – Versionamento de APIs RESTful</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Fri, 28 Nov 2025 22:14:03 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/restful-pilula-5-versionamento-de-apis-restful-1hnk</link>
      <guid>https://forem.com/andersoncontreira/restful-pilula-5-versionamento-de-apis-restful-1hnk</guid>
      <description>&lt;p&gt;Com o tempo, qualquer API evolui.&lt;br&gt;
Novos campos surgem, regras mudam, recursos são removidos e estruturas são reorganizadas.&lt;br&gt;
Sem versionamento, qualquer mudança pode quebrar clientes que dependem daquele contrato.&lt;/p&gt;

&lt;p&gt;Por isso, &lt;strong&gt;versionar APIs é essencial&lt;/strong&gt; para garantir evolução sem interromper quem já integra com você.&lt;/p&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;Por que versionar uma API?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Porque APIs mudam — e quando mudam, você precisa garantir:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;compatibilidade entre clientes antigos e novos&lt;/li&gt;
&lt;li&gt;segurança para introduzir breaking changes&lt;/li&gt;
&lt;li&gt;um caminho de migração previsível&lt;/li&gt;
&lt;li&gt;documentação clara, separada por versão&lt;/li&gt;
&lt;li&gt;estabilidade durante o ciclo de vida da API&lt;/li&gt;
&lt;/ul&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;Formas de versionamento&lt;/strong&gt;
&lt;/h1&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;1️⃣ Versionamento na URL (o mais comum e explícito)&lt;/strong&gt;
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /v1/users
GET /v2/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Simples, direto e fácil de documentar.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;2️⃣ Versionamento por Header&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Via &lt;code&gt;Accept Header&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Accept: application/vnd.myapp.v1+json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Manter as URLs limpas é um benefício, mas exige maturidade maior dos clientes. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota: É uma opção válida, mas eu recomendo usar o caminho mais tradicional e simples que é via URL.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3️⃣ Versionamento via Query Parameter (não recomendado)&lt;/strong&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /users?version=2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Evite — confunde cache, roteamento e não é considerado RESTful.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Nota: Em resumo, não use!!!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Arquitetura: como manter múltiplas versões?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Dependendo do design e da maturidade do sistema, duas abordagens são comuns:&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Abordagem 1 — Versões dentro da mesma aplicação&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A mesma aplicação (ou monólito, ou service) contém:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;código da versão 1&lt;/li&gt;
&lt;li&gt;código da versão 2&lt;/li&gt;
&lt;li&gt;rotas /v1 e /v2 expostas lado a lado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse modelo é muito comum e simples de manter quando as versões compartilham 80% da base lógica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prós:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;facilidade de deploy&lt;/li&gt;
&lt;li&gt;menos repositórios&lt;/li&gt;
&lt;li&gt;menor custo infra inicial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contras:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;código mais complexo&lt;/li&gt;
&lt;li&gt;necessidade de controle de legado dentro do mesmo código&lt;/li&gt;
&lt;li&gt;risco de acoplamento entre versões&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Abordagem 2 — Versões como aplicações totalmente separadas&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cada versão é uma aplicação distinta, com seu próprio repositório:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;api-v1&lt;/code&gt; (repo separado)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;api-v2&lt;/code&gt; (repo separado)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa abordagem é comum quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;V2 é radicalmente diferente da V1&lt;/li&gt;
&lt;li&gt;há reescrita completa&lt;/li&gt;
&lt;li&gt;existe intenção de isolar responsabilidades&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prós:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maior isolamento&lt;/li&gt;
&lt;li&gt;codebase mais limpa&lt;/li&gt;
&lt;li&gt;ciclo de vida independente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Contras:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mais repositórios&lt;/li&gt;
&lt;li&gt;mais custos operacionais&lt;/li&gt;
&lt;li&gt;mais pipelines e infraestrutura&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;📌 &lt;em&gt;Nota:&lt;/em&gt; Essa parte arquitetural será explorada em um &lt;strong&gt;artigo técnico dedicado&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Quando realmente criar uma nova versão?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Crie uma nova versão quando houver &lt;strong&gt;breaking changes&lt;/strong&gt;, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mudança estrutural de payloads&lt;/li&gt;
&lt;li&gt;renomeação ou remoção de campos&lt;/li&gt;
&lt;li&gt;mudança na semântica dos recursos&lt;/li&gt;
&lt;li&gt;alteração no comportamento de endpoints&lt;/li&gt;
&lt;li&gt;mudanças que impactem clientes antigos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adicionar novos campos &lt;strong&gt;não exige versão nova&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Versionamento também pode acontecer no API Gateway&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Além do versionamento na aplicação, Gateways também podem cuidar disso.&lt;br&gt;
É muito usado em arquiteturas de médio e grande porte.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Kong API Gateway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;No Kong, é possível:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;criar &lt;strong&gt;routes&lt;/strong&gt; separadas para cada versão&lt;/li&gt;
&lt;li&gt;apontar &lt;code&gt;/v1/*&lt;/code&gt; para um upstream&lt;/li&gt;
&lt;li&gt;apontar &lt;code&gt;/v2/*&lt;/code&gt; para outro serviço&lt;/li&gt;
&lt;li&gt;controlar ciclo de vida de versões facilmente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/v1/&lt;/code&gt; → &lt;code&gt;api-v1-service&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/v2/&lt;/code&gt; → &lt;code&gt;api-v2-service&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também permite ativar/desativar versões sem alterar a aplicação.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;AWS API Gateway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;No API Gateway da AWS, você pode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;usar &lt;strong&gt;stages&lt;/strong&gt; para cada versão (&lt;code&gt;v1&lt;/code&gt;, &lt;code&gt;v2&lt;/code&gt;, &lt;code&gt;v3&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;mapear rotas específicas para Lambdas ou serviços distintos&lt;/li&gt;
&lt;li&gt;versionar por &lt;strong&gt;deploy stage + base path mapping&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ter controle fino de throttling e lifecycle por versão&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É excelente para arquiteturas serverless ou híbridas.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;GCP API Gateway&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O API Gateway do Google permite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;criar configurações separadas de API para cada versão&lt;/li&gt;
&lt;li&gt;publicar múltiplas versões lado a lado&lt;/li&gt;
&lt;li&gt;usar &lt;strong&gt;OpenAPI specs&lt;/strong&gt; distintas para cada release&lt;/li&gt;
&lt;li&gt;rotear &lt;code&gt;/v1/&lt;/code&gt; e &lt;code&gt;/v2/&lt;/code&gt; para backends diferentes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simples e direto, com boa integração ao GCP.&lt;/p&gt;


&lt;h1&gt;
  
  
  &lt;strong&gt;Exemplo prático de versionamento&lt;/strong&gt;
&lt;/h1&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Versão 1&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /v1/products/10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Camiseta"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;39.90&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  &lt;strong&gt;Versão 2 (mudança estrutural)&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET /v2/products/10
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resposta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Camiseta"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pricing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"amount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;39.90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BRL"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;Resumo&lt;/strong&gt;
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Versionamento é essencial para estabilidade e evolução&lt;/li&gt;
&lt;li&gt;O modelo mais comum é &lt;code&gt;/v1/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Headers podem ser uma alternativa&lt;/li&gt;
&lt;li&gt;Query params não são recomendados (Não faça isso)&lt;/li&gt;
&lt;li&gt;Você pode versionar pela aplicação &lt;strong&gt;ou&lt;/strong&gt; pelo API Gateway&lt;/li&gt;
&lt;li&gt;Versionamento pode significar uma app com múltiplas versões &lt;strong&gt;ou&lt;/strong&gt; apps separadas&lt;/li&gt;
&lt;li&gt;Crie versões novas &lt;strong&gt;somente&lt;/strong&gt; quando houver breaking changes&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>rest</category>
      <category>code</category>
      <category>restapi</category>
    </item>
    <item>
      <title>Faculdade em TI não serve pra nada...</title>
      <dc:creator>Anderson Contreira</dc:creator>
      <pubDate>Thu, 27 Nov 2025 17:10:00 +0000</pubDate>
      <link>https://forem.com/andersoncontreira/faculdade-em-ti-nao-serve-pra-nada-5f1c</link>
      <guid>https://forem.com/andersoncontreira/faculdade-em-ti-nao-serve-pra-nada-5f1c</guid>
      <description>&lt;p&gt;&lt;em&gt;uma análise realista sobre carreira, ambição e futuro&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A frase “não precisa de faculdade para trabalhar com TI” virou moda.&lt;br&gt;
Aparece em posts, palestras, vídeos e discussões por toda parte. E sempre com o mesmo tom provocador:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Diploma não importa.”&lt;br&gt;
“A faculdade está ultrapassada.”&lt;br&gt;
“O que vale é codar.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse discurso parece libertador — e, em parte, ele realmente tem fundamento.&lt;br&gt;
Mas a verdade é mais complexa do que isso.&lt;br&gt;
Depois de anos trabalhando com empresas nacionais e internacionais, fica evidente que:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A faculdade não é tudo.&lt;br&gt;
Mas também está longe de não ser nada.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O debate não é “fazer ou não fazer”.&lt;br&gt;
O debate é &lt;strong&gt;que tipo de carreira você quer construir&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;1. Sim, o mercado ficou mais flexível, mas não para tudo&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;De fato, muitas empresas modernas deixaram de exigir diploma. Especialmente startups, consultorias e scale-ups, onde o que importa é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;experiência real&lt;/li&gt;
&lt;li&gt;projetos construídos&lt;/li&gt;
&lt;li&gt;capacidade de aprender rápido&lt;/li&gt;
&lt;li&gt;autonomia&lt;/li&gt;
&lt;li&gt;comunicação clara&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse cenário permite que profissionais entrem na área sem ensino superior.&lt;/p&gt;

&lt;p&gt;Mas isso vale principalmente para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;vagas júnior&lt;/li&gt;
&lt;li&gt;pleno&lt;/li&gt;
&lt;li&gt;alguns casos, para sêniors, mais focados em execução técnica&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ou seja:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;entrar na área sem faculdade é totalmente possível.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Crescer nela… já é outra história.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;2. Para cargos de liderança, o diploma volta a fazer diferença&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Quando falamos de posições como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tech Lead&lt;/li&gt;
&lt;li&gt;Staff Engineer&lt;/li&gt;
&lt;li&gt;Principal Engineer&lt;/li&gt;
&lt;li&gt;Engineering Manager&lt;/li&gt;
&lt;li&gt;Arquiteto de Software&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…a exigência muda.&lt;/p&gt;

&lt;p&gt;Essas funções não dependem apenas de código. Elas envolvem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;visão sistêmica&lt;/li&gt;
&lt;li&gt;pensamento estruturado&lt;/li&gt;
&lt;li&gt;maturidade profissional&lt;/li&gt;
&lt;li&gt;tomada de decisão&lt;/li&gt;
&lt;li&gt;influência e comunicação&lt;/li&gt;
&lt;li&gt;alinhamento com estratégia de negócio&lt;/li&gt;
&lt;li&gt;credibilidade interna&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É por isso que, em muitas empresas de médio e grande porte, &lt;strong&gt;o diploma ainda aparece como requisito mínimo&lt;/strong&gt; — mesmo que “desejável”.&lt;/p&gt;

&lt;p&gt;E não porque a faculdade ensine arquitetura moderna ou práticas avançadas, mas porque o diploma transmite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;consistência&lt;/li&gt;
&lt;li&gt;disciplina&lt;/li&gt;
&lt;li&gt;capacidade de completar ciclos&lt;/li&gt;
&lt;li&gt;base teórica&lt;/li&gt;
&lt;li&gt;preparação para responsabilidades maiores&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode crescer sem diploma?&lt;br&gt;
Sim.&lt;br&gt;
Mas o teto chega mais rápido.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;3. Vagas internacionais: mais exigentes do que o hype promete&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Outra distorção comum é acreditar que “lá fora ninguém liga para diploma”.&lt;/p&gt;

&lt;p&gt;Na prática, muitas vagas internacionais ainda pedem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bachelor’s Degree&lt;/strong&gt; (como requisito ou forte desejável)&lt;/li&gt;
&lt;li&gt;equivalente formal em tecnologia&lt;/li&gt;
&lt;li&gt;histórico acadêmico validado&lt;/li&gt;
&lt;li&gt;comprovação para processos de visto, imigração ou compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso acontece por motivos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;padronização global de RH&lt;/li&gt;
&lt;li&gt;exigências legais&lt;/li&gt;
&lt;li&gt;auditorias internas&lt;/li&gt;
&lt;li&gt;políticas de contratação&lt;/li&gt;
&lt;li&gt;responsabilidade sobre projetos críticos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E mesmo quando o diploma não é obrigatório, ele &lt;strong&gt;pesa&lt;/strong&gt; no filtro inicial.&lt;/p&gt;

&lt;p&gt;Em resumo:&lt;br&gt;
&lt;strong&gt;para quem mira carreira internacional, a faculdade aumenta competitividade de forma clara.&lt;/strong&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;4. Faculdade e certificações comunicam investimento na carreira&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Esse ponto é essencial — e raramente alguém menciona:&lt;/p&gt;

&lt;p&gt;Tanto diploma quanto certificações enviam uma mensagem direta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Eu invisto em mim mesmo.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Empresas (e clientes!) percebem isso.&lt;br&gt;
Mesmo que o conhecimento técnico venha de outras fontes, o diploma reforça:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;profissionalismo&lt;/li&gt;
&lt;li&gt;comprometimento&lt;/li&gt;
&lt;li&gt;base teórica&lt;/li&gt;
&lt;li&gt;disciplina&lt;/li&gt;
&lt;li&gt;credibilidade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Da mesma forma que um AWS Solutions Architect mostra entendimento em cloud,&lt;br&gt;
uma graduação mostra consistência de longo prazo.&lt;/p&gt;

&lt;p&gt;Isso não é tudo — mas é um diferencial claro.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;5. Liderança exige muito além de código&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Crescer em TI não é só aprofundar stack.&lt;br&gt;
É desenvolver habilidades como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gestão de projetos&lt;/li&gt;
&lt;li&gt;gestão de pessoas&lt;/li&gt;
&lt;li&gt;liderança&lt;/li&gt;
&lt;li&gt;comunicação e influência&lt;/li&gt;
&lt;li&gt;negociação&lt;/li&gt;
&lt;li&gt;capacidade de priorização&lt;/li&gt;
&lt;li&gt;visão de negócio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E é aí que cursos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pós-graduações&lt;/li&gt;
&lt;li&gt;MBAs&lt;/li&gt;
&lt;li&gt;cursos de liderança e gestão&lt;/li&gt;
&lt;li&gt;PMBOK&lt;/li&gt;
&lt;li&gt;comunicação assertiva&lt;/li&gt;
&lt;li&gt;gestão ágil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;…se tornam extremamente relevantes.&lt;/p&gt;

&lt;p&gt;Esses temas &lt;strong&gt;raramente são aprendidos sozinho&lt;/strong&gt;.&lt;br&gt;
E quem domina isso simplesmente avança mais rápido.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;6. “Mas eu conheço gente que cresceu sem diploma!”&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Sim.&lt;br&gt;
Exceções existem.&lt;br&gt;
E são inspiradoras.&lt;/p&gt;

&lt;p&gt;Mas construir sua carreira apoiada em exceções é arriscado.&lt;br&gt;
O mercado, no geral, segue padrões claros — e diploma, ainda hoje, &lt;strong&gt;continua sendo um desses padrões&lt;/strong&gt; para determinadas trilhas profissionais.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;7. Antes de perguntar “preciso de faculdade?”, pergunte: “onde eu quero chegar?”&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A resposta é simples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quer entrar na área? → &lt;strong&gt;Não precisa.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quer crescer até pleno/sênior? → &lt;strong&gt;Também não.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quer liderar, arquitetar, influenciar? → &lt;strong&gt;Ajuda muito — às vezes é requisito.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quer trabalhar no exterior? → &lt;strong&gt;Em muitos casos, é obrigatório.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Quer competir entre os melhores? → &lt;strong&gt;É um diferencial forte.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seu futuro define sua necessidade.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusão&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;A faculdade não garante nada.&lt;br&gt;
Mas dizer que “não serve pra nada” é simplificar demais uma realidade complexa.&lt;/p&gt;

&lt;p&gt;O diploma é uma ferramenta.&lt;br&gt;
Não é a única.&lt;br&gt;
Mas também não é irrelevante.&lt;/p&gt;

&lt;p&gt;E aqui vai o conselho mais prático possível:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Se puder, faça a faculdade o quanto antes — e se livre desse problema.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Se puder, faça também uma pós relevante em uma instituição decente.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Isso tira essa pendência do seu caminho e te liberta para focar nos próximos passos da sua carreira:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;evoluir tecnicamente,&lt;/li&gt;
&lt;li&gt;construir portfólio,&lt;/li&gt;
&lt;li&gt;liderar pessoas,&lt;/li&gt;
&lt;li&gt;desenvolver maturidade,&lt;/li&gt;
&lt;li&gt;conquistar oportunidades melhores,&lt;/li&gt;
&lt;li&gt;e abrir portas para o mercado global.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é sobre diploma.&lt;br&gt;
É sobre &lt;strong&gt;onde você quer chegar&lt;/strong&gt; —&lt;br&gt;
e se você prefere remover barreiras ou criar novas.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>career</category>
    </item>
  </channel>
</rss>
