<?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: Eden Paradisus</title>
    <description>The latest articles on DEV Community by Eden Paradisus (@edenzufferey).</description>
    <link>https://dev.to/edenzufferey</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%2F4221520%2F19f26fea-7a02-428f-856e-9add59591310.jpeg</url>
      <title>DEV Community: Eden Paradisus</title>
      <link>https://dev.to/edenzufferey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/edenzufferey"/>
    <language>en</language>
    <item>
      <title>Content Management System(CMS) from and Android Dev's perspectice - Day 1</title>
      <dc:creator>Eden Paradisus</dc:creator>
      <pubDate>Mon, 02 Nov 2026 10:34:27 +0000</pubDate>
      <link>https://dev.to/edenzufferey/content-management-systemcms-from-and-android-devs-perspectice-day-1-d55</link>
      <guid>https://dev.to/edenzufferey/content-management-systemcms-from-and-android-devs-perspectice-day-1-d55</guid>
      <description>&lt;p&gt;Hi!&lt;/p&gt;

&lt;p&gt;I've been working with Android and cross-platform mobile apps for a while now, and I'm trying to explore other technologies, especially now that AI is basically writing 70 to 80 percent of my code. I miss the days when we used to write code manually...&lt;/p&gt;

&lt;p&gt;Anyway, at my day job, a client asked us to add a Content Management System (CMS) to their existing website. They're open to either building one ourselves or using an existing service. Since I'm based in Japan, I decided to study and try a Japanese CMS service called &lt;strong&gt;microCMS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rsjmh65rjtvqrfmcboh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rsjmh65rjtvqrfmcboh.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From my research, a CMS is a system for creating and managing content-focused websites like blogs, news sites, and company pages.&lt;/p&gt;

&lt;p&gt;A very popular CMS comes to mind: &lt;strong&gt;WordPress&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The main difference between WordPress and microCMS is that WordPress is a &lt;strong&gt;monolith&lt;/strong&gt; CMS, while microCMS is a &lt;strong&gt;headless&lt;/strong&gt; CMS. "Headless" means it doesn't have a public-facing frontend. There's an admin screen where you write content, but no website for visitors.&lt;/p&gt;

&lt;p&gt;This is the main point of a headless CMS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;CMS stores content and serves JSON; you build the frontend.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Monolith vs Headless, Explained for Mobile Devs
&lt;/h2&gt;

&lt;p&gt;If you've built mobile apps, you already understand headless. You just haven't called it that.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Monolith (e.g. WordPress)&lt;/th&gt;
&lt;th&gt;Headless (e.g. microCMS)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Content storage&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admin screen for editors&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Renders the website for visitors&lt;/td&gt;
&lt;td&gt;✅ (themes/templates)&lt;/td&gt;
&lt;td&gt;❌ You build it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How you get the content&lt;/td&gt;
&lt;td&gt;It's already in the HTML&lt;/td&gt;
&lt;td&gt;A REST API that returns JSON&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Think about a typical Android project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;backend&lt;/strong&gt; stores data and exposes REST APIs.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Android app&lt;/strong&gt; calls those APIs and draws the UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A headless CMS is basically that backend, plus a nice admin dashboard so non-engineers can write content. Your website (or your Android app, or both) is just a client calling the API.&lt;/p&gt;

&lt;p&gt;That's why headless is popular. The same content can feed a website, a mobile app, or anything else that speaks HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why microCMS?
&lt;/h2&gt;

&lt;p&gt;There are many headless CMS options: Contentful, Strapi, Sanity, and more. I went with microCMS because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It's made in Japan&lt;/strong&gt;, so the docs and admin UI are in Japanese. That matters when the people writing content are Japanese-speaking non-engineers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;There's a free plan&lt;/strong&gt;, which is enough to learn and experiment with.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The admin UI is simple.&lt;/strong&gt; You don't need to be a developer to write and publish content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It's just REST.&lt;/strong&gt; If you've used Retrofit, you already know how to consume it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Key Concepts Before We Start
&lt;/h2&gt;

&lt;p&gt;These terms confused me at first, so here's a quick glossary:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Term&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Your project. Each service gets its own subdomain, like &lt;code&gt;your-service.microcms.io&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;A content type, like "blogs" or "news." Each one becomes a REST endpoint.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;List format (リスト形式)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;An API that holds many items, like blog posts.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Object format (オブジェクト形式)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;An API that holds a single item, like site settings or an "About" page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Schema (APIスキーマ)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The fields your content has: title, body, image, and so on. Like defining a data class.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API key&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The key you send in a request header so microCMS knows you're allowed to read the content.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you're a Kotlin dev, the schema is basically this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="kd"&gt;data class&lt;/span&gt; &lt;span class="nc"&gt;Blog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// rich text, returned as HTML&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;eyecatch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Image&lt;/span&gt;&lt;span class="p"&gt;?,&lt;/span&gt;
    &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;publishedAt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're defining that shape, just through a UI instead of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Create an Account and a Service
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;a href="https://microcms.io" rel="noopener noreferrer"&gt;microcms.io&lt;/a&gt; and sign up.&lt;/li&gt;
&lt;li&gt;Create a new &lt;strong&gt;service&lt;/strong&gt;. You'll choose:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service name&lt;/strong&gt;: anything, e.g. &lt;code&gt;My Tech Blog&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service ID&lt;/strong&gt;: this becomes your subdomain, e.g. &lt;code&gt;my-tech-blog&lt;/code&gt; → &lt;code&gt;my-tech-blog.microcms.io&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your service ID matters because it's part of every API URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create Your First API
&lt;/h2&gt;

&lt;p&gt;Inside your service, create a new API. microCMS offers templates (a blog template, for example), but I recommend &lt;strong&gt;starting from scratch&lt;/strong&gt; the first time so you understand every part.&lt;/p&gt;

&lt;p&gt;You'll set three things:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API name&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Blogs&lt;/td&gt;
&lt;td&gt;Display name in the admin UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;blogs&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Becomes part of the URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;API type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;List format&lt;/td&gt;
&lt;td&gt;Because we'll have many posts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 3: Define the Schema
&lt;/h2&gt;

&lt;p&gt;This is where you decide what fields a blog post has. Each field has a &lt;strong&gt;field ID&lt;/strong&gt; (used in the JSON), a &lt;strong&gt;display name&lt;/strong&gt; (shown to editors), and a &lt;strong&gt;type&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's a simple schema to start with:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field ID&lt;/th&gt;
&lt;th&gt;Display name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Title&lt;/td&gt;
&lt;td&gt;Text field&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;content&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Content&lt;/td&gt;
&lt;td&gt;Rich editor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;eyecatch&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Thumbnail&lt;/td&gt;
&lt;td&gt;Image&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Category&lt;/td&gt;
&lt;td&gt;Select field&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other useful field types include date, number, boolean, &lt;strong&gt;content reference&lt;/strong&gt; (link to another API, like a separate "categories" API), and &lt;strong&gt;repeater&lt;/strong&gt; (a list of mixed blocks).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; field IDs are what your code will see, so name them like variables: camelCase, in English, and stable. Renaming one later means updating your frontend too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Write and Publish Some Content
&lt;/h2&gt;

&lt;p&gt;Now switch to the editor role for a moment:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;Blogs&lt;/strong&gt; API.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add&lt;/strong&gt; and fill in the title, content, and thumbnail.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Publish (公開)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also save as a &lt;strong&gt;draft (下書き)&lt;/strong&gt;. Drafts don't show up in the public API, which is how editors can work on posts without them going live.&lt;/p&gt;

&lt;p&gt;This is the moment headless clicked for me. I just wrote a blog post, and there's no website anywhere. The content exists only as data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Call Your API
&lt;/h2&gt;

&lt;p&gt;Each API has an &lt;strong&gt;API preview&lt;/strong&gt; in the admin screen where you can try requests and see your API key. You can also call it from the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://my-tech-blog.microcms.io/api/v1/blogs"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"X-MICROCMS-API-KEY: your-api-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get something like this:&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;"contents"&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="s2"&gt;"abc123xyz"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"createdAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-11-02T10:00:00.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"updatedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-11-02T10:05:00.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"publishedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-11-02T10:05:00.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"revisedAt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-11-02T10:05:00.000Z"&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;"My first post"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;p&amp;gt;Hello from microCMS!&amp;lt;/p&amp;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;"eyecatch"&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;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://images.microcms-assets.io/..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;630&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1200&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;"category"&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;"Tech"&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;"totalCount"&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;"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;10&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;That's it: a working content API, and I didn't write a single line of backend code.&lt;/p&gt;

&lt;p&gt;A few query parameters worth knowing:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;limit&lt;/code&gt; / &lt;code&gt;offset&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;?limit=5&amp;amp;offset=10&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pagination&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;orders&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;?orders=-publishedAt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Newest first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fields&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;?fields=id,title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Only return specific fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;filters&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;?filters=category[contains]Tech&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filter results&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;To get a single post, add its ID:&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 https://my-tech-blog.microcms.io/api/v1/blogs/abc123xyz
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A Note on API Keys
&lt;/h2&gt;

&lt;p&gt;microCMS lets you configure what each API key can do (read, create, update, delete). For anything public-facing, use a &lt;strong&gt;read-only key&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As an Android dev, this is the part I'd stress the most: &lt;strong&gt;anything you put in an APK can be extracted.&lt;/strong&gt; A read-only key that exposes only published content is usually fine. Never ship a key with write permissions in a client app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A headless CMS is &lt;strong&gt;a backend with an admin dashboard&lt;/strong&gt;. If you've consumed REST APIs in mobile apps, you already know most of what you need.&lt;/li&gt;
&lt;li&gt;Designing the &lt;strong&gt;schema&lt;/strong&gt; is the real work. It's the contract between editors and developers, just like a data class.&lt;/li&gt;
&lt;li&gt;Content lives as data, not pages. That's what lets one CMS feed a website and an app at the same time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Right now I have an API that returns JSON, but nobody can actually &lt;em&gt;see&lt;/em&gt; the blog. In the next post, I'll build the frontend with &lt;strong&gt;Astro&lt;/strong&gt;, a framework that turns this JSON into a fast static website.&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you're also a mobile dev exploring the web side, let me know what you're learning. &lt;/p&gt;

</description>
      <category>android</category>
      <category>api</category>
      <category>learning</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
