|
| 1 | +--- |
| 2 | +title: The History and Philosophy of AEPs |
| 3 | +date: 2025-02-03 |
| 4 | +authors: |
| 5 | + - name: Yusuke Tsutsumi |
| 6 | +--- |
| 7 | + |
| 8 | +# The History and Philosophy of AEPs |
| 9 | + |
| 10 | +There have been a lot of interest in the AEPs, and a question that often comes |
| 11 | +up is "where did the AEPs come from?" and "what are the underlying motivation |
| 12 | +and philosophies of the project?". This blog post aims to help answer those |
| 13 | +questions. |
| 14 | + |
| 15 | +## What are AEPs? |
| 16 | + |
| 17 | +AEP is short for "API Enhancement Proposal", intended to be a comprehensive |
| 18 | +specification, set of best practices, and tools to help an organization provide |
| 19 | +best-in-class resource-oriented APIs. |
| 20 | + |
| 21 | +More specifically, the following is provided: |
| 22 | + |
| 23 | +1. An API design specification for gRPC and REST APIs, with a heavy focus on |
| 24 | + [resource-oriented design](https://aep.dev/121/) and |
| 25 | + [standard methods](https://aep.dev/130/) that operate on them. |
| 26 | + |
| 27 | +2. Design patterns for common use cases such as |
| 28 | + [long-running operations](https://aep.dev/151/), |
| 29 | + [resource revisions](https://aep.dev/162/), |
| 30 | + [filtering](https://aep.dev/160/), with best practices aggregated from API |
| 31 | + design experts with experience at Google, Microsoft, Meta, Roblox, and |
| 32 | + DataBricks. |
| 33 | + |
| 34 | +3. An ecosystem of |
| 35 | + [server-side and client-side tooling](https://aep.dev/tooling-and-ecosystem/) |
| 36 | + to produce and consume AEP-compliant APIs. |
| 37 | + |
| 38 | +## How did the AEPs begin? |
| 39 | + |
| 40 | +The history of AEPs begin with the AIPs: |
| 41 | +[Google API Improvement Proposals](https://google.aip.dev/): a set of design |
| 42 | +patterns for resource-oriented APIs, focusing primarily on protobuf. AIPs |
| 43 | +themselves were then open sourcing of internal documentation around Google |
| 44 | +API's best practices. |
| 45 | + |
| 46 | +Along with Google's own design practices, aip.dev also had a generic industry |
| 47 | +wide component, that primarily focused on the idea of creating design style |
| 48 | +guides that tailor to an organization's own needs. This project includes |
| 49 | +components such as a |
| 50 | +[style guide site generator](https://github.com/aip-dev/site-generator) as well |
| 51 | +as a template of [more generic guidance](https://github.com/aip-dev/aip.dev). |
| 52 | + |
| 53 | +Although aip.dev is not a formal API specification, an ecosystem of tooling |
| 54 | +does exist that adheres to it, including: |
| 55 | + |
| 56 | +- A protobuf based [api-linter](https://linter.aip.dev/). |
| 57 | + |
| 58 | +- A [client library generator](https://github.com/googleapis/gapic-generator). |
| 59 | + |
| 60 | +Among the contributors to aip.dev, some wanted to see a stronger formalization |
| 61 | +of the API design guidance itself, for a few reasons: |
| 62 | + |
| 63 | +1. To act as a reference point for organization-agnostic best practices. |
| 64 | + |
| 65 | +2. To enable an official ecosystem of tooling to make best-practice APIs |
| 66 | + easier to build and consume. |
| 67 | + |
| 68 | +This group forked aip.dev and created aep.dev. Since its founding in 2023, |
| 69 | +aep.dev has rapidly progressed in building out a tooling ecosystem, and proving |
| 70 | +that well-designed APIs can truly enable a simple-to-maintain but powerful |
| 71 | +ecosystem of tooling |
| 72 | +([read more here](https://aep.dev/tooling-and-ecosystem/)). |
| 73 | + |
| 74 | +## What philosophies drive aep.dev? |
| 75 | + |
| 76 | +### Adopting and sharing resource-oriented API best practices |
| 77 | + |
| 78 | +We do not want to reinvent the wheel. Instead, our guidance is based on IETF |
| 79 | +RFCs that exist around HTTP semantics, using them when applicable. |
| 80 | + |
| 81 | +### Powerful server-side and client-side tooling, enabled by simple, consistent APIs. |
| 82 | + |
| 83 | +As organizations develop their APIs, organizations must often create their own |
| 84 | +service generators to create consistency, as well as create client-side tooling |
| 85 | +to consume them. This includes: |
| 86 | + |
| 87 | +- Linters and style guide checkers to ensure API consistency |
| 88 | + |
| 89 | +- server-side generators, handling the creation of boilerplate interfaces that |
| 90 | + enable common features that include: CRUD of basic resources, pagination and |
| 91 | + filtering for lists, precondition checking, and documentation generation. |
| 92 | + |
| 93 | +- Clients that interface with these APIs, including: SDKs, command line |
| 94 | + interface, web-based UIs, asset inventories. |
| 95 | + |
| 96 | +Rather than have every organization create their own clients, AEPs strive to |
| 97 | +provide the above tools, allowing an organization to focus on their goal and |
| 98 | +from having to have full teams dedicated to maintaining these tools. |
| 99 | + |
| 100 | +## Where to learn more? |
| 101 | + |
| 102 | +Now that you have an understanding of the aeps, we encourage you to |
| 103 | +[explore the project](https://aep.dev/), use the |
| 104 | +[specification](https://aep.dev/1/) to help guide your APIs, and use the |
| 105 | +[tooling](https://aep.dev/tooling-and-ecosystem/) to help produce and consume |
| 106 | +them. Visit the [home page](https://aep.dev/) for more information! |
0 commit comments