<?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>DEV Community: Daniel Freitas</title>
    <description>The latest articles on DEV Community by Daniel Freitas (@daniel_freitas_6b99d8e91b).</description>
    <link>https://dev.to/daniel_freitas_6b99d8e91b</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2568021%2F33665614-e4e9-48a4-ba30-d935f3a59a6d.jpg</url>
      <title>DEV Community: Daniel Freitas</title>
      <link>https://dev.to/daniel_freitas_6b99d8e91b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/daniel_freitas_6b99d8e91b"/>
    <language>en</language>
    <item>
      <title>I built Cepify — a free Brazilian postal code (CEP) API, ViaCEP-compatible (Spring Boot 4 / Java 25)</title>
      <dc:creator>Daniel Freitas</dc:creator>
      <pubDate>Thu, 18 Jun 2026 20:56:39 +0000</pubDate>
      <link>https://dev.to/daniel_freitas_6b99d8e91b/i-built-cepify-a-free-brazilian-postal-code-cep-api-viacep-compatible-spring-boot-4-java-25-5hl9</link>
      <guid>https://dev.to/daniel_freitas_6b99d8e91b/i-built-cepify-a-free-brazilian-postal-code-cep-api-viacep-compatible-spring-boot-4-java-25-5hl9</guid>
      <description>&lt;p&gt;Quick context for non-Brazilian readers: a &lt;strong&gt;CEP&lt;/strong&gt; (&lt;em&gt;Código de Endereçamento Postal&lt;/em&gt;) is Brazil's equivalent&lt;br&gt;
  of a ZIP/postal code. The de-facto free API for it is &lt;a href="https://viacep.com.br" rel="noopener noreferrer"&gt;ViaCEP&lt;/a&gt;, which is great — but&lt;br&gt;
  I wanted a project to really dig into &lt;strong&gt;Spring Boot 4 + Java 25&lt;/strong&gt;, and I kept wanting something I fully&lt;br&gt;
  control. So I built &lt;strong&gt;Cepify&lt;/strong&gt;, a free, high-performance CEP lookup web service.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://cepify.com.br" rel="noopener noreferrer"&gt;https://cepify.com.br&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CEP lookup returning &lt;strong&gt;JSON, XML and JSONP&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address search&lt;/strong&gt; (state / city / street)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ViaCEP compatibility&lt;/strong&gt;: it mirrors ViaCEP's routes and response shape (including the classic &lt;code&gt;{"erro":
"true"}&lt;/code&gt; for a missing CEP), so you can switch the base URL on existing ViaCEP code&lt;/li&gt;
&lt;li&gt;A "proper" REST API too (&lt;code&gt;/v1/ceps/{cep}&lt;/code&gt;) with &lt;code&gt;ETag&lt;/code&gt; / &lt;code&gt;Cache-Control&lt;/code&gt; and standardized errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No sign-up, no API key&lt;/strong&gt;, with per-IP rate limiting&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A few technical decisions I found interesting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The database holds &lt;strong&gt;~1.5M postal codes&lt;/strong&gt;, loaded by an ETL that processes the Brazilian Post Office's
&lt;strong&gt;e-DNE&lt;/strong&gt; dataset. Keeping it fresh without taking the production table down was honest work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caffeine cache&lt;/strong&gt; in front of lookups (the service is far more read than write) — made responses snappy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability via logs, not a table&lt;/strong&gt;: every request becomes a JSON access-log line + Prometheus
metrics. For a read-heavy service (and with privacy/LGPD in mind) that felt healthier than writing
everything to the DB.&lt;/li&gt;
&lt;li&gt;Docs via &lt;strong&gt;Swagger/OpenAPI&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stack: Spring Boot 4, Java 25, PostgreSQL, Caffeine, Flyway, behind Cloudflare.&lt;/p&gt;

&lt;h2&gt;
  
  
  About
&lt;/h2&gt;

&lt;p&gt;It's a &lt;strong&gt;personal, free project&lt;/strong&gt; — no enterprise SLA, but it's live and working. I'd genuinely love&lt;br&gt;
  feedback, especially: &lt;strong&gt;what would you want from a postal-code API that existing ones don't offer today?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>java</category>
      <category>showdev</category>
      <category>springboot</category>
    </item>
  </channel>
</rss>
