<?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: Skip Everling</title>
    <description>The latest articles on DEV Community by Skip Everling (@everling).</description>
    <link>https://dev.to/everling</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%2F288414%2Fdef6b63d-792c-40f3-894d-a828dcedd963.png</url>
      <title>DEV Community: Skip Everling</title>
      <link>https://dev.to/everling</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/everling"/>
    <language>en</language>
    <item>
      <title>A New Era for TypeDB</title>
      <dc:creator>Skip Everling</dc:creator>
      <pubDate>Mon, 10 Jul 2023 22:49:53 +0000</pubDate>
      <link>https://dev.to/typedb/a-new-era-for-typedb-njh</link>
      <guid>https://dev.to/typedb/a-new-era-for-typedb-njh</guid>
      <description>&lt;p&gt;When we started building TypeDB, we saw a continuously growing complexity of data in modern applications. Modern programming languages have evolved by introducing powerful abstractions and constructs to express more complex logic – JavaScript is succeeded by TypeScript, Java by Kotlin, C/C++ by Rust, and Haskell emerging as the leader of functional languages. &lt;strong&gt;Modern languages all have a stronger and more expressive type system.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;However, when we look at the evolution of database technologies since relational algebra and SQL, even though there has been incredible progress in performance and operational capabilities in the past 40 years, &lt;strong&gt;databases have yet to provide more powerful abstractions to express more advanced logic.&lt;/strong&gt; In fact, graph, document, key-value, wide-column, and every other NoSQL database provide lower-level and more primitive data structures for us to express our models and queries. This is a huge problem for future applications, as they will need to work with more complex datasets and interrogate their data more intelligently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We built TypeDB &amp;amp; TypeQL to provide much more powerful abstractions in the database language,&lt;/strong&gt; allowing you to tackle the next order of complexity in future applications. For the first time, TypeDB brings to the database the power of a &lt;strong&gt;strong type system&lt;/strong&gt; &lt;em&gt;,&lt;/em&gt; the simplicity of a &lt;strong&gt;composable language&lt;/strong&gt;, and the intelligence of &lt;strong&gt;symbolic reasoning&lt;/strong&gt; to infer data.&lt;/p&gt;

&lt;p&gt;This year, we’re launching &lt;a href="https://typedb.com"&gt;typedb.com&lt;/a&gt; to help you understand &lt;a href="https://typedb.com/introduction"&gt;our paradigm&lt;/a&gt; and &lt;a href="https://typedb.com/features"&gt;unique features&lt;/a&gt;, and to deliver a brand new and enhanced &lt;a href="https://typedb.com/docs/typedb/2.x/overview.html"&gt;documentation portal&lt;/a&gt;. We are also incredibly excited to invite you to the very first &lt;a href="https://typedb.com/webinars"&gt;webinar series&lt;/a&gt; on &lt;strong&gt;TypeDB Fundamentals&lt;/strong&gt;, happening in just 3 weeks!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/introducing-typedb"&gt;July 25th, 12pm ET: Introducing TypeDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/pattern-matching"&gt;July 26th, 12pm ET: Pattern Matching with TypeQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/power-of-inference"&gt;July 27th, 12pm ET: The Power of Inference&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We see the problem of data complexity in many modern applications, especially those serving intelligent operations.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://typedb.com/solutions/cybersecurity"&gt;Cybersecurity&lt;/a&gt;, Cyber Threat Intelligence and Identity Access Management solutions struggle to keep up with rapid evolution of data and the amount of hidden patterns. In &lt;a href="https://typedb.com/solutions/platform-engineering"&gt;Platform Engineering&lt;/a&gt;, Internal Developer Platforms and Continuous Delivery systems struggle with the unknown consequences of change and fragmentation of data. In &lt;a href="https://typedb.com/solutions/knowledge-engineering"&gt;Knowledge Engineering&lt;/a&gt;, Drug Discovery and Risk Management solutions find that their biggest hurdle is connecting independent datasets in a way that makes it easy to derive hidden and implicit connections. &lt;a href="https://typedb.com/solutions/virtual-representations"&gt;Virtual Representations&lt;/a&gt;, such as those found in Robotics, Digital Twins, and Gaming, struggle with modeling real-world details in a virtual environment.&lt;/p&gt;

&lt;p&gt;This year, we’ll be sharing with you the research we’ve done on applications of TypeDB in these advanced domains, starting with our first &lt;a href="https://typedb.com/webinars"&gt;webinar series&lt;/a&gt; on our new &lt;strong&gt;TypeDB Use Cases&lt;/strong&gt;, happening 4 weeks from now!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/identity-access-management"&gt;August 1st, 12pm ET: Building an IAM Platform on TypeDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/cyber-threat-intelligence"&gt;August 2nd, 12pm ET: Building a CTI Platform on TypeDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://typedb.com/webinars/drug-discovery"&gt;August 3rd, 12pm ET: Accelerating Drug Discovery with TypeDB&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;TypeDB Cloud&lt;/strong&gt; Alpha is here!
&lt;/h2&gt;

&lt;p&gt;After a whole year of engineering, we are finally ready to invite you to try out &lt;a href="https://typedb.com/cloud"&gt;TypeDB Cloud&lt;/a&gt;! You can now automatically deploy TypeDB in the US and Europe, on Google Cloud and Amazon AWS. More regions across the globe will be coming soon, as well as the option for Microsoft Azure. At this alpha stage of TypeDB Cloud, we’d love to hear your feedback on how TypeDB Cloud meets your expectations, and you’ll have the opportunity to contribute to our development roadmap! &lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://typedb.com/cloud?dialog=cloud-waitlist"&gt;Join the TypeDB Cloud waitlist!&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Finally, &lt;strong&gt;TypeDB 2.18 &amp;amp; 2.19&lt;/strong&gt; are released with major updates!
&lt;/h2&gt;

&lt;p&gt;We’ve had 2 major releases in the past month: 2.18 and 2.19. We introduced new functionalities to perform arithmetic operations in TypeQL. We’ve significantly improved import/export of schema &amp;amp; data together. We replaced our storage engine from &lt;a href="https://rocksdb.org/"&gt;RocksDB&lt;/a&gt; to &lt;a href="https://www.speedb.io/"&gt;SpeeDB&lt;/a&gt; and boosting performance. And finally, we now natively support ARM processors for both Mac and Linux, which means you can run TypeDB on Apple silicon chips as well as Raspberry Pis!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vaticle/typedb/releases/tag/2.18.0"&gt;TypeDB 2.18 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/vaticle/typedb/releases/tag/2.19.0"&gt;TypeDB 2.19 Release Notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are a lot more major updates coming in the next few months: a new and highly-performant TypeDB Rust driver – and every other driver wrapping the Rust driver binary, new TypeQL capabilities to fetch all attributes of entities and relations as part of answers, optional query patterns in TypeQL, native JSON response format, and many more! For now, we hope you enjoy the new TypeDB 2.19!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://typedb.com/deploy"&gt;&lt;strong&gt;Deploy the new TypeDB&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>database</category>
      <category>backend</category>
      <category>programming</category>
      <category>news</category>
    </item>
    <item>
      <title>How to Write an OpenAPI Description</title>
      <dc:creator>Skip Everling</dc:creator>
      <pubDate>Thu, 16 Jul 2020 02:54:16 +0000</pubDate>
      <link>https://dev.to/everling/how-to-write-an-openapi-description-for-your-api-314a</link>
      <guid>https://dev.to/everling/how-to-write-an-openapi-description-for-your-api-314a</guid>
      <description>&lt;p&gt;There’s a lot you can do once you have an API description file formatted according to the OpenAPI Specification (or its predecessor spec, Swagger). Using a standardized API description format as a single source of truth allows for better API design &amp;amp; development, as well as the automatic generation and deployment of API reference documentation. &lt;/p&gt;

&lt;p&gt;Since API descriptions are plain text format, you can use any text editor to create one. It can be helpful to begin with a template so you don’t have to start from scratch (below there's one you can copy!). Alternatively, if the API you want to document is already in production, we'll explore some other options to generate an API description file.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you need a review of what OpenAPI and Swagger are, check out &lt;a href="https://blog.readme.com/how-to-use-openapi-and-swagger-spec-for-documentation/"&gt;ReadMe: How to Use OpenAPI and Swagger for Documentation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dW0zXc30--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/63jlvjkf3x7679lrarrz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dW0zXc30--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/63jlvjkf3x7679lrarrz.png" alt="OpenAPI-Swagger-spec"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  OpenAPI Template
&lt;/h2&gt;

&lt;p&gt;To get started with an OpenAPI file, it can be helpful to start with a basic outline that includes the essential syntax. Then you can step through each line and make edits to include the proper details from your API. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You don’t have to start from scratch! Here is a template OpenAPI definition:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openapi: "3.0.0"
info:
  version: 1.0.0 // Version of your API
  title: Your API Title
  description: An API description template
  contact:
    name: Your Name
    email: email@example.com
    url: http://example.com
  license:
    name: License Name
    url: http://example.com/license-url
servers:
  - url: http://api.example.com
paths:
  /your_endpoint:
    get:
      description: |
        Multi-line description
        of your API endpoint
      operationId: yourOperation
      parameters:
        - name: your_param
          in: query
          description: Description of your param
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Your success description
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This template doesn’t include complete coverage of all possible OpenAPI fields, but it’s useful as starter code. In most cases you’ll want to add your own response schemas and reusable components. You can dig into the &lt;a href="https://github.com/OAI/OpenAPI-Specification"&gt;OAS specification&lt;/a&gt; itself or see our OpenAPI and Swagger examples below.&lt;/p&gt;

&lt;p&gt;Once you have an initial framework for your API described, you can complete coverage for the remainder of your API.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenAPI Descriptions are Written in JSON or YAML
&lt;/h3&gt;

&lt;p&gt;When you write your OpenAPI or Swagger file, you can choose from either of two formats: &lt;a href="https://www.json.org/json-en.html"&gt;JSON&lt;/a&gt; or &lt;a href="https://yaml.org/"&gt;YAML&lt;/a&gt;. Both will use the same data structure (determined by the Swagger or OpenAPI specification), but each will have a different syntax representation. JSON may look familiar to most web developers and it is the most common format used to return actual API results. YAML may also look familiar, as it’s often used in configuration files. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YAML&lt;/strong&gt; uses whitespace and minimal markup, which can make it more human-readable compared to JSON.&lt;/p&gt;

&lt;p&gt;Below is an example OpenAPI 3 YAML description, showing the header and one path/response.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;openapi: "3.0.0"
info:
  version: 1.0.0
  title: Swagger Petstore
  license:
    name: MIT
servers:
  - url: http://petstore.swagger.io/v1
paths:
  /pets:
    get:
      summary: List all pets
      operationId: listPets
      tags:
        - pets
      parameters:
        - name: limit
          in: query
          description: How many items to return at one time (max 100)
          required: false
          schema:
            type: integer
            format: int32
      responses:
        '200':
          description: A paged array of pets
          headers:
            x-next:
              description: A link to the next page of responses
              schema:
                type: string
          content:
            application/json:    
              schema:
                $ref: "#/components/schemas/Pets"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/OAI/OpenAPI-Specification/tree/master/examples/v3.0"&gt;OAS Examples, Petstore YAML&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**JSON **is the more common format for data exchange, but is less human-readable. Here’s the same OpenAPI 3 description fomatted using JSON:&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
   "openapi": "3.0.0",
   "info": {
      "version": "1.0.0",
      "title": "Swagger Petstore",
      "license": {
         "name": "MIT"
      }
   },
   "servers": [
      {
         "url": "http://petstore.swagger.io/v1"
      }
   ],
   "paths": {
      "/pets": {
         "get": {
            "summary": "List all pets",
            "operationId": "listPets",
            "tags": [
               "pets"
            ],
            "parameters": [
               {
                  "name": "limit",
                  "in": "query",
                  "description": "How many items to return at one time (max 100)",
                  "required": false,
                  "schema": {
                     "type": "integer",
                     "format": "int32"
                  }
               }
            ],
            "responses": {
               "200": {
                  "description": "A paged array of pets",
                  "headers": {
                     "x-next": {
                        "description": "A link to the next page of responses",
                        "schema": {
                           "type": "string"
                        }
                     }
                  },
                  "content": {
                     "application/json": {
                        "schema": {
                           "$ref": "#/components/schemas/Pets"
                        }
                     }
                  }
               }
            }
         }
      }
   }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/readmeio/oas/blob/master/packages/examples/3.0/json/petstore.json"&gt;OAS Examples, Petstore JSON&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Modern programming languages and their respective web frameworks can readily consume JSON objects, and this is a major reason for why many API providers adopt the JSON format. Most web developers are familiar with JSON syntax thanks to its resemblance to Javascript.&lt;/p&gt;

&lt;p&gt;Neither YAML or JSON are immune to human error, but editors with linters will catch the most common errors.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You can convert files between JSON and YAML, so feel free to choose whichever format is preferable for you and your team.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  How to Write OpenAPI Descriptions With Your Favorite Code Editor
&lt;/h3&gt;

&lt;p&gt;Your current development environment or text editor will include YAML and JSON syntax highlighting and may already include Swagger and OpenAPI syntax support as well. Look for plugins, which can help with syntax suggestions or checking for errors as you write your API description. Alternatively, you can use existing open source or web-based tools.&lt;/p&gt;

&lt;p&gt;For example, the VSCode editor has an &lt;a href="https://marketplace.visualstudio.com/items?itemName=mermade.openapi-lint"&gt;open source linter plugin&lt;/a&gt; to check YAML and JSON files against Swagger and OpenAPI specifications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kO0FaTH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0aga8hc16moe9j2clai0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kO0FaTH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/0aga8hc16moe9j2clai0.png" alt="Code Linter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Shown above is an example of an in-editor linter program which will raise errors and flag conventions for cleaner code. You can click each error to go to the line where the issue originated. In the screenshot, we accidentally misspelled &lt;code&gt;description&lt;/code&gt;, resulting in the linter raising missing required property errors on line 48 with the typo.&lt;/p&gt;

&lt;p&gt;With most editors, you can edit either OpenAPI or Swagger files in YAML, with syntax help and built-in linting. When finished, you can programmatically convert YAML to the equivalent JSON.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Generate OpenAPI Descriptions From an Existing API
&lt;/h3&gt;

&lt;p&gt;If you already have an API in production, you can benefit from documenting it in an OpenAPI file. To save yourself some time, look for some ways you can generate the descriptions from your code or live traffic.&lt;/p&gt;

&lt;p&gt;If your API is built in a common framework, such as Falcon (Python) or Rails (Ruby), your code already has everything needed to create a Swagger or OpenAPI description. Look for an existing project that creates an API definition based on an existing API. For example, &lt;a href="https://github.com/zhandao/zero-rails_openapi"&gt;&lt;code&gt;zero-rails_openapi gem&lt;/code&gt;&lt;/a&gt; is a Rails solution and &lt;a href="https://pypi.org/project/falcon-apispec/"&gt;&lt;code&gt;falcon-apispec&lt;/code&gt;&lt;/a&gt; does the same for Falcon. You can also &lt;a href="https://dev.to/generating-a-swagger-file-from-your-code/"&gt;create API descriptions from code comments&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There could be many reasons it's not possible to reference source code. In that case, you might use a service like &lt;a href="https://www.useoptic.com/"&gt;Optic&lt;/a&gt; to listen to live API traffic. After reviewing live requests and responses, Optic can output an OpenAPI or Swagger file.&lt;/p&gt;

&lt;p&gt;Finally, another option is to make small updates to comments in your code. Using the &lt;a href="https://openap.is/"&gt;&lt;code&gt;oas&lt;/code&gt; Node module&lt;/a&gt;, you can generate your definition from inline YAML. This is a ReadMe open source tool where it is used internally to &lt;a href="https://dev.to/documenting-your-api-in-your-code-with-swagger/"&gt;document APIs from code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope this helps you to create and make use of an OpenAPI description for your API!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;This is an excerpt from my extended guide on &lt;a href="https://blog.readme.com/how-to-use-openapi-and-swagger-spec-for-documentation/"&gt;ReadMe: How to Use OpenAPI and Swagger for Documentation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>webdev</category>
      <category>openapi</category>
      <category>api</category>
      <category>learning</category>
    </item>
    <item>
      <title>Jamstack Attack! Static Sites, Dynamic APIs, Killer DX</title>
      <dc:creator>Skip Everling</dc:creator>
      <pubDate>Mon, 18 May 2020 20:44:23 +0000</pubDate>
      <link>https://dev.to/everling/jamstack-attack-static-sites-dynamic-apis-killer-dx-3a6p</link>
      <guid>https://dev.to/everling/jamstack-attack-static-sites-dynamic-apis-killer-dx-3a6p</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is the Jamstack and why is it on the rise?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4VhMM4aG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d33wubrfki0l68.cloudfront.net/0e10c97634da0242be91bec4f6a198a78dd68f99/b5de5/img/jamstack-full-logo.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4VhMM4aG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://d33wubrfki0l68.cloudfront.net/0e10c97634da0242be91bec4f6a198a78dd68f99/b5de5/img/jamstack-full-logo.svg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DSu4VGS1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://paper-attachments.dropbox.com/s_E810DF5FAE5FFA4D7307B42FACD8F21D10C5A8E7942911504C9F1478D92A8711_1588311003204_Google%2BTrend%2Bof%2BJAMstack.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DSu4VGS1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://paper-attachments.dropbox.com/s_E810DF5FAE5FFA4D7307B42FACD8F21D10C5A8E7942911504C9F1478D92A8711_1588311003204_Google%2BTrend%2Bof%2BJAMstack.png" alt="“JAMstack” Google search interest, starting in 2017. (Google Trends)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the Jamstack?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Jamstack&lt;/strong&gt; (originally stylized &lt;strong&gt;JAMstack&lt;/strong&gt;) is an approach to building web applications that extends the ideas of “static sites” to emphasize their true dynamic potential. Originally introduced by Matthew Biilmann in 2016, then popularized by &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt; and other companies in 2017 onward, the Jamstack approach continues to grow in popularity thanks to its design for rapid scalability, performance, security, and relatively easy developer experience.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;JAM&lt;/strong&gt; in Jamstack is an acronym that stands for: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Markup
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FNOSLWU6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.freecodecamp.org/news/content/images/2020/02/jamstack-breakdown-3.jpg" alt="Image credit: Colby Fayock, What is the JAMstack and How Do I Get Started? (freecodecamp.org)"&gt;
&lt;em&gt;Image credit: Colby Fayock, What is the JAMstack and How Do I Get Started? (freecodecamp.org)&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;JavaScript&lt;/strong&gt; in the client browser handles dynamic interaction using a set of reusable &lt;strong&gt;APIs&lt;/strong&gt; to abstract away server-side (backend) operations. An app often combines the use of many API services, each tailored toward a specific operation set (more on this later!). &lt;strong&gt;Markup&lt;/strong&gt; is the technology used to serve prebuilt websites as static files to end users without delay.&lt;/p&gt;

&lt;p&gt;Key facts and features of the Jamstack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;JavaScript web applications&lt;/li&gt;
&lt;li&gt;APIs for dynamic services (no reliance on specific servers)&lt;/li&gt;
&lt;li&gt;Pre-rendered pages (Markup, including HTML/CSS) &lt;/li&gt;
&lt;li&gt;Deployed via CDN&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Highly Scalable&lt;/li&gt;
&lt;li&gt;Highly Performant&lt;/li&gt;
&lt;li&gt;Highly Secure&lt;/li&gt;
&lt;li&gt;Easy to implement&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Don’t Call Them Static Sites
&lt;/h2&gt;

&lt;p&gt;“You may have already seen or worked on a Jamstack site! They do not have to include &lt;em&gt;all&lt;/em&gt; attributes of JavaScript, APIs, and Markup. They might be built using sites built by hand, or with Jekyll, Hugo, Nuxt, Next, Gatsby, or another &lt;a href="https://www.staticgen.com/"&gt;static site generator&lt;/a&gt;. &lt;em&gt;The thing that they all have in common is that they don’t depend on a web server.&lt;/em&gt;” —&lt;a href="https://jamstack.org/"&gt;jamstack.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jamstack apps don’t rely on web servers. So how are they able to behave as if they do? &lt;/p&gt;

&lt;p&gt;APIs are the secret sauce that allow a Jamstack application to go beyond being a “static site.” Web developers can use relatively simple HTTP calls to endpoints maintained and scaled by other providers, thereby abstracting away all of their server-side concerns. Developers don’t need to worry about the meticulous work that goes into building a reliable and performant backend, and can instead focus on their front end and user experience. They can make a static site remarkably dynamic with extended functionality. Developers are able to take full advantage of best-in-class API solutions offered by the industry.&lt;/p&gt;

&lt;p&gt;API services used in Jamstack applications often include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;E-Commerce APIs (e.g. &lt;a href="https://snipcart.com/blog/jamstack"&gt;Snipcart&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Content Serving APIs (e.g. &lt;a href="https://www.contentful.com/r/knowledgebase/jamstack-cms/"&gt;Contentful&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Search functionality via third-party services (e.g. &lt;a href="https://www.algolia.com/"&gt;Algolia&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Custom serverless functions&lt;/li&gt;
&lt;li&gt;Custom data stores and data queries&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Developer Experience: Will Your API Jam?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4xRYnfaR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://paper-attachments.dropbox.com/s_E810DF5FAE5FFA4D7307B42FACD8F21D10C5A8E7942911504C9F1478D92A8711_1589348000167_will%2Bit%2Bblend%2Bapi%2Bdx.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4xRYnfaR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://paper-attachments.dropbox.com/s_E810DF5FAE5FFA4D7307B42FACD8F21D10C5A8E7942911504C9F1478D92A8711_1589348000167_will%2Bit%2Bblend%2Bapi%2Bdx.jpg" alt="Your API Developer Experience: Will it JAM?"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developers building their site with Jamstack naturally take on a microservices approach to building out their server-side functionality and are eager to make use of existing APIs that fulfill their requirements. In the early prototyping and exploration phases, the search for suitable APIs includes sampling third-party API services. &lt;/p&gt;

&lt;p&gt;To get developers to adopt and enjoy &lt;em&gt;your&lt;/em&gt; API, you can’t just tell them about features, you need to show them you care about their experience with your documentation. In the case of a bad or missing documentation, the crowd will inevitably seek alternatives that offer a better experience. &lt;/p&gt;

&lt;p&gt;If you’re looking for some helpful guidance, Andy Trattner sat down with me in April to write up his &lt;a href="https://blog.readme.com/4-key-questions/"&gt;4 Steps to Implementing Stellar Documentation&lt;/a&gt; for the ReadMe blog, while API Engineer Jon Ursenbach told us all about &lt;a href="https://blog.readme.com/how-to-make-your-api-more-enjoyable-to-use/"&gt;How to Make Your API More Enjoyable to Use&lt;/a&gt;. Documentation owners will find these articles help them to feel more confident they’ve properly considered their developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  More About the Jamstack
&lt;/h2&gt;

&lt;p&gt;Hungry for more Jamstack knowledge? Here are some sweet resources to help you get started:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/automata/awesome-jamstack"&gt;awesome-jamstack&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;An extensive list of awesome Jamstack resources and APIs, curated on GitHub.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jamstack.org/"&gt;jamstack.org&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Netlify’s Jamstack resource site.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jamstack.training/"&gt;jamstack.training&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Tamas Piros’ free course catalog (itself a Jamstack app!).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Jam On!
&lt;/h2&gt;

&lt;p&gt;The Jamstack development phenomenon shows little sign of slowing down and now you know why: fast, scalable static architecture made dynamic thanks to APIs. With an easy developer experience free of server-side concerns, we’ll continue to see its popularity rise as the age of cloud computing continues. Jam on! &lt;/p&gt;




&lt;p&gt;(This article was originally published for &lt;a href="https://blog.readme.com/jamstack-static-sites-dynamic-apis-killer-dx/"&gt;ReadMe&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>ux</category>
      <category>api</category>
    </item>
  </channel>
</rss>
