<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AEP | Blog</title><description/><link>https://aep.dev/</link><language>en</language><item><title>Announcing the aep-2026 Release</title><link>https://aep.dev/blog/aep-2026-release/</link><guid isPermaLink="true">https://aep.dev/blog/aep-2026-release/</guid><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;the-coordination-challenge&quot;&gt;The Coordination Challenge&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Building software is a team sport, but keeping everyone on the same page is
hard. When every team has to invent their own API patterns — deciding how
pagination works, or how to format errors — we end up with a lot of wasted
effort and systems that don’t quite fit together. This isn’t just about having
“standards”. It’s about ensuring that users and tools don’t have to
continuously relearn the same standards.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;a-shared-standard-and-tools&quot;&gt;A Shared Standard and Tools&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://aep.dev/aep-2026/1/&quot;&gt;aep-2026 edition&lt;/a&gt; is our answer to that
friction. It is an opinionated API design specification, providing well-defined
requirements around common REST concepts like CRUD standard methods,
pagination, filtering, and more. By agreeing on these common patterns, we make
it easier for services to talk to each other, clients to be built, and for
developers to move between projects without needing to learn idiosyncratic
conventions.&lt;/p&gt;
&lt;img src=&quot;https://aep.dev/_astro/aep_300_image.CCQAqGaP_Z1hJCgM.webp&quot; alt=&quot;Screenshot of the AEP-300 rule describing edition-based versioning&quot; width=&quot;745&quot; height=&quot;330&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;p&gt;AEP (API Enhancement Proposals) is an open-source, “anti-bike shedding” kit. It
answers the routine questions so we can all focus on the interesting ones. It’s
about a shared foundation that lifts everyone up and lets everyone build on the
same tooling platform.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;stability-for-builders&quot;&gt;Stability for Builders&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;To build lasting tools, you need a solid foundation. You can’t build tooling on
top of a spec that changes regularly. The aep-2026 edition is a major milestone
because we are introducing a stable version of the specification and
establishing a release cadence with &lt;a href=&quot;https://aep.dev/300/&quot;&gt;AEP-300&lt;/a&gt;. This
decouples stability for consumers and evolving our best practices:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For Builders:&lt;/strong&gt; Invest in linters, libraries, and other
&lt;a href=&quot;https://aep.dev/tooling-and-ecosystem/#tools&quot;&gt;tools&lt;/a&gt; today knowing they will
keep working for years.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;For the Future:&lt;/strong&gt; We can keep discussing new improvements for the next
edition (AEP-2028) without breaking the tools you rely on right now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The tooling is guaranteed to be compatible for the three most
&lt;a href=&quot;https://aep.dev/300/#first-party-clients-and-tooling&quot;&gt;recent editions of AEPs&lt;/a&gt;,
effectively a &lt;strong&gt;6 year stability cycle&lt;/strong&gt; based on our current 2-year cadence.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;the-tooling-ecosystem&quot;&gt;The Tooling Ecosystem&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Because the standard is now stable, we can share a set of tools that help
everyone do less grunt work. The 2026 edition launches with a compatible
ecosystem ready for you to use:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure:&lt;/strong&gt; A
&lt;a href=&quot;https://github.com/aep-dev/terraform-provider-aep&quot;&gt;Terraform Provider&lt;/a&gt; to
handle the deployment details.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integration:&lt;/strong&gt; An &lt;a href=&quot;https://github.com/aep-dev/aep-mcp-server&quot;&gt;MCP Server&lt;/a&gt;
to let AI agents understand your APIs out of the box.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exploration:&lt;/strong&gt; An &lt;a href=&quot;http://ui.aep.dev&quot;&gt;Interactive Web UI&lt;/a&gt; to make daily
development smoother.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speed:&lt;/strong&gt; A &lt;a href=&quot;https://github.com/aep-dev/aepcli&quot;&gt;CLI&lt;/a&gt; to quickly call an
AEP-compatible service.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h1 id=&quot;next-steps&quot;&gt;Next Steps&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Come see what we’ve built. Whether you use the whole platform or just grab a
few good ideas, you are welcome here.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explore:&lt;/strong&gt; Check out the
&lt;a href=&quot;https://aep.dev/tooling-and-ecosystem/#tools&quot;&gt;Tools Page&lt;/a&gt; to see what’s
available or visit the &lt;a href=&quot;http://aep.dev&quot;&gt;aep.dev&lt;/a&gt; site to review the numbered
rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Join:&lt;/strong&gt; Drop into a
&lt;a href=&quot;https://github.com/aep-dev/aeps/tree/main?tab=readme-ov-file#learn-and-connect&quot;&gt;weekly Friday meeting&lt;/a&gt;
or hop into our #aep
&lt;a href=&quot;https://github.com/aep-dev/aeps/tree/main?tab=readme-ov-file#learn-and-connect&quot;&gt;Slack channel&lt;/a&gt;
in the CNCF Slack to ask questions or say hello.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h1 id=&quot;contributors&quot;&gt;Contributors&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;This release is the result of years of work and feedback from the community.
Special thanks to Richard Frankel, Marsh Gardiner, Yusuke Tsutsumi, Alex
Stephen, and Mike Kistler for their stewardship as maintainers on this release.
We are also grateful to the growing community of contributors, including David
Gagne, Olivier Cano, Oscar Söderlund, and others!&lt;/p&gt;</content:encoded></item><item><title>AEP Terraform Provider</title><link>https://aep.dev/blog/terraform-post/</link><guid isPermaLink="true">https://aep.dev/blog/terraform-post/</guid><pubDate>Mon, 31 Mar 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A core thesis of the AEP project has been that API design constraints can
facilitate the creation (and maintenance!) of API client tools. In many
companies, teams are staffed to build out CLI tools, Terraform providers, UIs,
LLM agents, and various other tools that act as thin layers on top of a
company’s APIs. The AEP project aims to ensure that these tools can be easily
generated on top of our API design, ensuring that companies can move faster
with less overall effort. We’re excited to launch our first version of a
&lt;a href=&quot;https://github.com/aep-dev/terraform-provider-aep&quot;&gt;fully auto-generated Terraform provider&lt;/a&gt;
based off the AEPs.&lt;/p&gt;
&lt;img src=&quot;https://aep.dev/_astro/terraform_image.1NPTCjUi_N3EgC.webp&quot; alt=&quot;A pipeline showing AEP APIs becoming a Terraform provider&quot; width=&quot;2048&quot; height=&quot;414&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
&lt;div&gt;&lt;h1 id=&quot;what-is-terraform&quot;&gt;What is Terraform?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Terraform is a powerful Infrastructure-as-Code (IaC) tool that allows you to
define and manage your infrastructure using code. Infrastructure-as-Code, in
general, is the practice of managing and provisioning infrastructure through
machine-readable definition files rather than through manual processes. This
means you can automate the creation, modification, and deletion of resources
across various cloud providers and on-premises environments, ensuring
consistency, repeatability, and version control.&lt;/p&gt;
&lt;p&gt;Cloud companies often build out Terraform providers, which are responsible for
establishing differences between the cloud and the user’s intent, determining
which API requests are necessary, making those requests, and handling any
follow-up actions.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;how-do-the-aeps-help-with-this&quot;&gt;How do the AEPs help with this?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;Most companies must staff engineers just to maintain their Terraform provider.
However, making AEP-compliant APIs can give you providers for no additional
effort beyond writing the API! Let’s take a look at a pseudocode version of the
Terraform lifecycle.&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;userIntention &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;GetTerraformPlan&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;currentState &lt;/span&gt;&lt;span&gt;:=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ReadResource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userIntention&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; currentState &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; null:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; user wishes to delete:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;DeleteResource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;currentState&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt; currentState &lt;/span&gt;&lt;span&gt;!=&lt;/span&gt;&lt;span&gt; userIntention:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;UpdateResource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userIntention&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;else&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;CreateResource&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;userIntention&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Two different sets of problems emerge and the AEPs are well-suited for solving
both of them.&lt;/p&gt;
&lt;p&gt;The first set of problems revolves around the grouping and calling of APIs.
There’s a variety of tools in the market that will call an API method given a
set of parameters and an OpenAPI description (or even just a URL). Terraform
doesn’t expose individual API methods, but instead exposes a resource schema.
This raises a variety of questions when developing a Terraform provider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What are my resources?&lt;/li&gt;
&lt;li&gt;How do I know which API methods to call for a given resource?&lt;/li&gt;
&lt;li&gt;Is there a single API method that can be called for each CRUD operation, or
will I need to chain together API calls to achieve my result?&lt;/li&gt;
&lt;li&gt;How do I derive my resource schema from four distinct CRUD APIs? Is it simply
the union of all the body parameters from the four CRUD API methods?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AEP APIs are resource-oriented by default, so just following the AEPs can
address all of the problems above. The Terraform provider can “know” which API
methods should be called and how they relate to each other.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;what-about-api-responses&quot;&gt;What about API responses?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The second set of problems comes from reading API responses. In the pseudocode
above, the Read response needs to be parsed and checked against the Terraform
plan. This means that the Terraform provider needs to understand the
relationship between the API response (beyond simple error checking) and the
user’s intention. More questions emerge:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Does the response of the Read API match the resource schema? What changes
need to be made to match the Read API response to the potential resource
schema?&lt;/li&gt;
&lt;li&gt;Are there multiple ways that the server will accept a single value? If so,
how can I be sure that two semantically equivalent values do not result in a
diff against the Terraform plan?&lt;/li&gt;
&lt;li&gt;If a boolean value does not appear in the JSON response, does that mean it’s
&lt;code dir=&quot;auto&quot;&gt;false&lt;/code&gt;? (And likewise for numeric values being &lt;code dir=&quot;auto&quot;&gt;0&lt;/code&gt;, string values being the
empty string, and so on.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Many of these questions come down to the preference of the API developer. In
fact, some of them cannot be defined by an API schema! The AEPs encode these
differences in our specification, so that tools like our Terraform provider can
make assumptions about how to parse the responses of our APIs.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;the-aep-terraform-provider&quot;&gt;The AEP Terraform Provider&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://github.com/aep-dev/terraform-provider-aep&quot;&gt;AEP Terraform provider&lt;/a&gt;
solves these problems. The provider is a template that can be pointed to any
OpenAPI spec that features APIs complying with the AEPs. Since the APIs are
resource-oriented and AEP-compliant, the provider is able to create a resource
schema at runtime that perfectly matches the APIs. Did your team build a new
feature? Just update your OpenAPI spec and the provider will add it without
users having to update their providers.&lt;/p&gt;
&lt;p&gt;Users are able to send over arbitrary headers so that the provider will work
with any authentication solution you may have.&lt;/p&gt;
&lt;p&gt;When users run &lt;code dir=&quot;auto&quot;&gt;terraform apply&lt;/code&gt;, the provider automatically knows how to
create Create, Read, Update, and Delete requests, handle authentication, and
return errors. More crucially, it understands how to handle the responses from
those requests. The provider understands what values to expect from the Get
requests and the proper way to handle difference checking against the user’s
intention.&lt;/p&gt;
&lt;div&gt;&lt;h1 id=&quot;what-comes-next&quot;&gt;What comes next?&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;While the Terraform provider lifecycle appears simple at first glance, the
details contain a deceptive amount of detail. This is detail that can only be
learned through trial-and-error, which is difficult when APIs are often only
designed once.&lt;/p&gt;
&lt;p&gt;By building out the Terraform provider, we’re even more convinced than ever
that the AEP specification can prove the thesis that client tooling can be more
easily built on top of consistent APIs.&lt;/p&gt;</content:encoded></item><item><title>AEP&apos;s 2025 Roadmap - Building Momentum</title><link>https://aep.dev/blog/2025-roadmap/</link><guid isPermaLink="true">https://aep.dev/blog/2025-roadmap/</guid><pubDate>Fri, 07 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;As we begin 2025, we want to share our ambitions for the API Enhancement
Proposals (AEP) project. After a successful 2024 that saw the launch of several
key tools and growing community engagement, our focus for 2025 is on
stabilizing the specification while expanding the ecosystem of tools.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;specification-and-standards&quot;&gt;Specification and Standards&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;A major milestone for 2025 will be the v0.1 release of the AEP specification.
This represents the culmination of much work to adapt and expand the original
API Improvement Proposals, with particular focus on resource-oriented design
patterns that work across both Protocol Buffers and HTTP APIs. The 0.1 release
will include support for the &lt;a href=&quot;https://aep.dev/130/&quot;&gt;standard methods&lt;/a&gt;,
long-running operations (LRO), and other
&lt;a href=&quot;https://aep.dev/general/#design-patterns&quot;&gt;design patterns&lt;/a&gt; supported across
our toolchain.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;tooling-releases&quot;&gt;Tooling Releases&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Building on the specification, we will be releasing initial versions of core
tools in 2025:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A production-ready version of the OpenAPI linter with coverage of the
standard methods, list-related patterns, and LROs of the 0.1 specification&lt;/li&gt;
&lt;li&gt;An enhanced Protocol Buffer linter reflecting the latest AEP guidance&lt;/li&gt;
&lt;li&gt;aepcli with LRO support of the 0.1 specification&lt;/li&gt;
&lt;li&gt;The first official release of our Terraform provider&lt;/li&gt;
&lt;li&gt;A stable release of aep-explorer for visually navigating AEP-compliant APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;community-growth&quot;&gt;Community Growth&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In May, we plan on giving a talk about aep.dev at
&lt;a href=&quot;https://www.apidays.global/new-york/&quot;&gt;API Days New York&lt;/a&gt;. The video will be
released online for those who would like to view but cannot attend.&lt;/p&gt;
&lt;p&gt;Building on the success of our 2024 barn raising, we are planning another
community event after the 0.1 specification release. This will focus on helping
organizations learn about the specification, enabling adoption of our
specification and tools, and onboarding interested contributors to the project.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;longer-term-goals&quot;&gt;Longer-Term Goals&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;In the second half of 2025, we’ll focus on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stabilizing and potentially releasing version 0.1 of aepc, our toolkit for
generating service stubs from resource definitions&lt;/li&gt;
&lt;li&gt;Expanding existing tooling based on real-world usage and feedback&lt;/li&gt;
&lt;li&gt;Expanding and refining guidance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you are building new APIs or working to improve existing ones, 2025
will be an exciting year to get involved with AEPs! Join us in our mission to
make APIs more consistent and maintainable across many industries.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Join us:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On CNCF Slack in the
&lt;a href=&quot;https://cloud-native.slack.com/archives/C04TX46UCTV&quot;&gt;#aep&lt;/a&gt; channel&lt;/li&gt;
&lt;li&gt;At our weekly community meetings (Fridays at 11:30am PT)&lt;/li&gt;
&lt;li&gt;Through our documentation at &lt;a href=&quot;http://aep.dev&quot;&gt;aep.dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;On GitHub at &lt;a href=&quot;http://github.com/aep-dev&quot;&gt;github.com/aep-dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>The History and Philosophy of AEPs</title><link>https://aep.dev/blog/history-of-aeps/</link><guid isPermaLink="true">https://aep.dev/blog/history-of-aeps/</guid><pubDate>Mon, 03 Feb 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;the-history-and-philosophy-of-aeps&quot;&gt;The History and Philosophy of AEPs&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;There have been a lot of interest in the AEPs, and a question that often comes
up is “where did the AEPs come from?” and “what are the underlying motivation
and philosophies of the project?“. This blog post aims to help answer those
questions.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-are-aeps&quot;&gt;What are AEPs?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;AEP is short for “API Enhancement Proposal”, intended to be a comprehensive
specification, set of best practices, and tools to help an organization provide
best-in-class resource-oriented APIs.&lt;/p&gt;
&lt;p&gt;More specifically, the following is provided:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;An API design specification for gRPC and REST APIs, with a heavy focus on
&lt;a href=&quot;https://aep.dev/121/&quot;&gt;resource-oriented design&lt;/a&gt; and
&lt;a href=&quot;https://aep.dev/130/&quot;&gt;standard methods&lt;/a&gt; that operate on them.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Design patterns for common use cases such as
&lt;a href=&quot;https://aep.dev/151/&quot;&gt;long-running operations&lt;/a&gt;,
&lt;a href=&quot;https://aep.dev/162/&quot;&gt;resource revisions&lt;/a&gt;,
&lt;a href=&quot;https://aep.dev/160/&quot;&gt;filtering&lt;/a&gt;, with best practices aggregated from API
design experts with experience at Google, Microsoft, Meta, Roblox, and
DataBricks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;An ecosystem of
&lt;a href=&quot;https://aep.dev/tooling-and-ecosystem/&quot;&gt;server-side and client-side tooling&lt;/a&gt;
to produce and consume AEP-compliant APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;how-did-the-aeps-begin&quot;&gt;How did the AEPs begin?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The history of AEPs begin with the AIPs:
&lt;a href=&quot;https://google.aip.dev/&quot;&gt;Google API Improvement Proposals&lt;/a&gt;: a set of design
patterns for resource-oriented APIs, focusing primarily on protobuf. AIPs
themselves were then open sourcing of internal documentation around Google
API’s best practices.&lt;/p&gt;
&lt;p&gt;Along with Google’s own design practices, aip.dev also had a generic industry
wide component, that primarily focused on the idea of creating design style
guides that tailor to an organization’s own needs. This project includes
components such as a
&lt;a href=&quot;https://github.com/aip-dev/site-generator&quot;&gt;style guide site generator&lt;/a&gt; as well
as a template of &lt;a href=&quot;https://github.com/aip-dev/aip.dev&quot;&gt;more generic guidance&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Although aip.dev is not a formal API specification, an ecosystem of tooling
does exist that adheres to it, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A protobuf based &lt;a href=&quot;https://linter.aip.dev/&quot;&gt;api-linter&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A &lt;a href=&quot;https://github.com/googleapis/gapic-generator&quot;&gt;client library generator&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Among the contributors to aip.dev, some wanted to see a stronger formalization
of the API design guidance itself, for a few reasons:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To act as a reference point for organization-agnostic best practices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;To enable an official ecosystem of tooling to make best-practice APIs
easier to build and consume.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This group forked aip.dev and created aep.dev. Since its founding in 2023,
aep.dev has rapidly progressed in building out a tooling ecosystem, and proving
that well-designed APIs can truly enable a simple-to-maintain but powerful
ecosystem of tooling
(&lt;a href=&quot;https://aep.dev/tooling-and-ecosystem/&quot;&gt;read more here&lt;/a&gt;).&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;what-philosophies-drive-aepdev&quot;&gt;What philosophies drive aep.dev?&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;adopting-and-sharing-resource-oriented-api-best-practices&quot;&gt;Adopting and sharing resource-oriented API best practices&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We do not want to reinvent the wheel. Instead, our guidance is based on IETF
RFCs that exist around HTTP semantics, using them when applicable.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;powerful-server-side-and-client-side-tooling-enabled-by-simple-consistent-apis&quot;&gt;Powerful server-side and client-side tooling, enabled by simple, consistent APIs.&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;As organizations develop their APIs, organizations must often create their own
service generators to create consistency, as well as create client-side tooling
to consume them. This includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Linters and style guide checkers to ensure API consistency&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;server-side generators, handling the creation of boilerplate interfaces that
enable common features that include: CRUD of basic resources, pagination and
filtering for lists, precondition checking, and documentation generation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Clients that interface with these APIs, including: SDKs, command line
interface, web-based UIs, asset inventories.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rather than have every organization create their own clients, AEPs strive to
provide the above tools, allowing an organization to focus on their goal and
from having to have full teams dedicated to maintaining these tools.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;where-to-learn-more&quot;&gt;Where to learn more?&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Now that you have an understanding of the aeps, we encourage you to
&lt;a href=&quot;https://aep.dev/&quot;&gt;explore the project&lt;/a&gt;, use the
&lt;a href=&quot;https://aep.dev/1/&quot;&gt;specification&lt;/a&gt; to help guide your APIs, and use the
&lt;a href=&quot;https://aep.dev/tooling-and-ecosystem/&quot;&gt;tooling&lt;/a&gt; to help produce and consume
them. Visit the &lt;a href=&quot;https://aep.dev/&quot;&gt;home page&lt;/a&gt; for more information!&lt;/p&gt;</content:encoded></item><item><title>AEP&apos;s 2024 Year in Review</title><link>https://aep.dev/blog/2024-in-review/</link><guid isPermaLink="true">https://aep.dev/blog/2024-in-review/</guid><pubDate>Thu, 19 Dec 2024 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h1 id=&quot;building-better-apis-together-aeps-2024-year-in-review&quot;&gt;Building Better APIs Together: AEP’s 2024 Year in Review&lt;/h1&gt;&lt;/div&gt;
&lt;p&gt;As we close out 2024, we want to share the significant strides the API
Enhancement Proposals (AEP) project has made in creating a more cohesive API
ecosystem. What started as a fork of Google’s API Improvement Proposals has
evolved into something much more ambitious: an open, community-driven standard
for building resource-oriented APIs that work consistently across different
protocols and platforms.&lt;/p&gt;
&lt;p&gt;A brief summary of the achievements outlined below are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The creation of aepc, an AEP “compiler” that takes a succinct resource
definition and generates protobuf and OpenAPI schemas.&lt;/li&gt;
&lt;li&gt;The 0.1 release of aepcli, which can consume aep-compliant APIs and generate
a resource-oriented command-line-interfaces dynamically.&lt;/li&gt;
&lt;li&gt;A complete linter for protobuf APIs, and starting an OAS variant.&lt;/li&gt;
&lt;li&gt;aep-explorer: a prototype of a WEB UI to explore aep-compliant APIs.&lt;/li&gt;
&lt;li&gt;A redesigned website (aep.dev), where this blog post is published!&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;the-vision-takes-shape&quot;&gt;The Vision Takes Shape&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;This year clarified our core belief that API design shouldn’t be a bikeshedding
honeypot. By collecting hard-won design patterns from across the industry,
we’ve worked to narrow the decisions API producers need to make while improving
the experience for API consumers. Our approach focuses on resource-oriented
design principles that can be expressed in both Protocol Buffers and OpenAPI,
making AEPs protocol-agnostic while maintaining strong opinions about what
makes APIs more usable and maintainable.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;major-technical-achievements&quot;&gt;Major Technical Achievements&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;aepc-the-aep-compiler&quot;&gt;aepc: The AEP compiler&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We introduced &lt;a href=&quot;https://github.com/aep-dev/aepc&quot;&gt;aepc&lt;/a&gt;, our service compiler
that transforms concise resource definitions into fully-specified APIs. With
just a few dozen lines of YAML describing your resources and their
relationships, aepc generates complete Protocol Buffer and OpenAPI
specifications that adhere to AEP standards. This dramatically reduces the
boilerplate needed to create consistent APIs while enforcing best practices
through generation rather than just validation.&lt;/p&gt;
&lt;p&gt;aepc is just a prototype with no official release at this moment, but it has
been very useful, producing AEP-compliant OpenAPI and protobuf specifications
that are used as examples in the specification.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;aepcli-a-command-line-interface-for-everyone&quot;&gt;aepcli: A Command-Line Interface for Everyone&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;The launch of version 0.1 of &lt;a href=&quot;https://github.com/aep-dev/aepcli&quot;&gt;aepcli&lt;/a&gt; marked
a significant milestone in our tooling journey. Rather than requiring every API
provider to build their own CLI, aepcli dynamically generates a powerful
command-line interface from any AEP-compliant API’s OpenAPI specification. This
client-side approach means new API features are immediately available without
requiring CLI updates, solving a common pain point in API tooling.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;aep-explorer&quot;&gt;aep-explorer&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;To complement our command-line tools, we developed a web-based UI for browsing
and interacting with AEP-compliant APIs:
&lt;a href=&quot;https://github.com/aep-dev/aep-explorer&quot;&gt;aep-explorer&lt;/a&gt; . This provides a more
visual way to understand and experiment with APIs while maintaining the same
consistent interaction patterns that make AEPs valuable.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;enhanced-linting-capabilities&quot;&gt;Enhanced Linting Capabilities&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A major focus this year was improving our linting capabilities, particularly
for OpenAPI specifications. Mike Kistler led the effort to revitalize our
&lt;a href=&quot;https://github.com/aep-dev/aep-openapi-linter&quot;&gt;OpenAPI linter&lt;/a&gt;, implementing
rules for key AEPs including AEP-132 (List methods) and AEP-135. The linter
helps teams validate their APIs against AEP guidance, catching common issues
early in the development process.&lt;/p&gt;
&lt;p&gt;Significantly progress was also made for our
&lt;a href=&quot;https://github.com/aep-dev/api-linter&quot;&gt;protobuf linter&lt;/a&gt;, which is now
compliant with all of the updated guidance in aep.dev.&lt;/p&gt;
&lt;p&gt;The linter’s approach balances pragmatism with standards enforcement - while
some rules are mandatory, others can be selectively adopted based on an
organization’s needs. This flexibility helps teams gradually adopt AEP
practices while maintaining consistent APIs. The project uses Spectral as its
foundation, allowing teams to build on an established tooling ecosystem while
adding AEP-specific validations.&lt;/p&gt;
&lt;p&gt;To help teams get started, we’ve included comprehensive test cases and example
APIs that demonstrate proper implementation of AEP patterns. The linter has
already helped identify areas where our documentation needed clarification,
particularly around operation IDs and resource naming conventions.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;improved-infrastructure&quot;&gt;Improved Infrastructure&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;A major focus this year was improving the components used for learning about
the AEP standards and enforcing them in our organization.&lt;/p&gt;
&lt;p&gt;To help teams get started, we’ve built comprehensive test cases and example
APIs that demonstrate proper implementation of AEP patterns. The linters have
already helped identify areas where our documentation needed clarification,
particularly around operation IDs and resource naming conventions.&lt;/p&gt;
&lt;p&gt;Additionally, we’ve built out a new aep.dev website based on a new framework to
help highlight our guidance and to help the team release new content over time.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;community-growth&quot;&gt;Community Growth&lt;/h2&gt;&lt;/div&gt;
&lt;div&gt;&lt;h3 id=&quot;the-march-barn-raising&quot;&gt;The March Barn Raising&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;On Pi Day (March 14), we held our first community “barn raising” event,
bringing together contributors from across companies and time zones. The event
focused on improving documentation, adding OpenAPI examples, and making AEPs
more accessible to newcomers. This collaborative effort helped us identify and
address gaps in our guidance while strengthening our community bonds.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;expanding-global-reach&quot;&gt;Expanding Global Reach&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Recognizing our growing international community, we established EU-friendly
meeting times and welcomed contributors from companies like DoubleVerify,
providing valuable feedback on real-world AEP adoption. This led to
improvements in our documentation and examples, particularly around pagination
and custom methods.&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;educational-content&quot;&gt;Educational Content&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;We launched the &lt;a href=&quot;https://www.youtube.com/@aepdev&quot;&gt;@aepdev&lt;/a&gt; YouTube channel
featuring detailed demonstrations of our tooling and explanations of AEP
concepts. These videos help newcomers understand both the technical details and
the broader vision of what we’re building.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;looking-forward-to-2025&quot;&gt;Looking Forward to 2025&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;As we enter the new year, our focus areas include:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Expanding our linting tools across both Protocol Buffer and OpenAPI
specifications&lt;/li&gt;
&lt;li&gt;Building more client generators, including Terraform providers and
Kubernetes operators&lt;/li&gt;
&lt;li&gt;Working with the OpenAPI community on resource-oriented API patterns&lt;/li&gt;
&lt;li&gt;Supporting more companies in adopting AEPs, with clear migration paths and
tooling support&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;&lt;h2 id=&quot;get-involved&quot;&gt;Get Involved&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;We’re building AEPs in the open and welcome contributions of all kinds. You can
join us:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On CNCF Slack in the #aep channel&lt;/li&gt;
&lt;li&gt;At our weekly community meetings (Fridays at 11:30am PT)&lt;/li&gt;
&lt;li&gt;On GitHub at &lt;a href=&quot;https://github.com/aep-dev&quot;&gt;github.com/aep-dev&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Through our documentation at &lt;a href=&quot;https://aep.dev&quot;&gt;aep.dev&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Whether you’re building new APIs or working to improve existing ones, we
believe AEPs can help make that process more consistent and maintainable. Join
us in building better APIs together!&lt;/p&gt;</content:encoded></item></channel></rss>