Open jgeewax opened 5 years ago
I've been thinking a lot about this, and have some ideas that don't feel fully fleshed out, but would like to contribute here for brainstorming purposes.
TL;DR I think there is an opportunity here to define a AIP Specification that would result custom AIPs to be comparable to one another and extensible. I propose an example "spec" using the existing AIP definitions. However, I think this is a long term goal, and in the short term we should focus on implementing a hollow AIP implementation that allows adopters to populate with their own AIPs.
I think one of the advantages of AIP adoption across companies would be to enable AIP consumers to take two different AIP implementations and compare them side by side. This would be more easily implemented if the AIP standard defined AIP number/urls/ids for cross cutting concerns across API standards. For example, if I went to google.aip.dev/xyz to read Google's standard for "foo", then I would know that going to acme.aip.dev/xyz is going to contain Acme's standards for "foo".
This would require some level of normalization of the AIPs, as there are a few AIPs that appear to be very specific edge cases for Google.
The rough idea here would be to implement something like the following:
These AIPs would exist above the currently existing Meta AIPs. They would define an overarching AIP spec that would apply to all AIP implementations. This would define the finalized version of what is being proposed here, specifically under the Guidance section.
Similar to the currently implemented AIPs, except less Googley. These would be implementation specific AIPs that define the governance of the AIPs for that organization. A default would be defined for each -- which would also be the actual AIP used by aip.dev -- however it is expected that organizations would fill in a few blanks or amend according to their needs.
Example:
Using the language as it exists today, Guidance AIPs would be the actual implementation of the AIPs and would be where the value resides.
The challenge with standardizing the Guidance APIs is identifying what is a cross cutting concern for API developers, or even cross cutting concerns for those who define the standards.
Below I've taken a stab at categorizing what I think would be the cross cutting concerns that are portrayed in aip.dev. I'm providing this more to attempt to get the point across and am not suggesting that this is the best starting point:
Guidance
There are likely additional common concerns with each of the bullet points above. For example, some common considerations when defining Field Names are what case to use, what words are reserved, what characters to avoid, etc. These could be part of the AIP specification.
Each leaf in the above tree will represent an AIP. However, it seems likely that some organizations may have further addendums to make to a leaf that may result in an additional AIP. For example, if the Google AIPs were redefined in the above approach, would the States AIP be a a leaf of Enumeration? Or a sibling? Or just be defined as a custom header under the Enumeration AIP? The real question to answer regarding such a situation is, which approach would allow custom AIPs (not part of the AIP Specification) be extensible in and of themselves and allow for the greatest comparison between the Spec'ed AIPs in the implementation against those of other implementations.
Although these might be standard cross cutting concerns, API definers or AIP implementers may not want to define all of these right away, or ever. And if there is not default implementation of them, they may not want an empty page. There should be a "NA" status that removes the page from the nav bar and search results and displays an NA page if implemented.
Here is a list of AIPs that I thought were very specific to Google. These could go in custom categories under any of the above nodes: Transcoding, Long Running Operations, Reading Across Collections, Resource Revisions?, File and Directory Structure, retries for gRPC clients, field behavior documentation, beta blocking changes, Unicode
What I think is working with the above proposal is that it would allow AIPs to be normalized across organizational implementations. I would like to see if it could be normalized across protocols, but I am not entirely convinced that is possible. However there might be additional AIP Specifications specific to the protocol (HTTP vs gRPC) or standard (REST vs RPC) being used.
All this said, I believe there is an opportunity here to enable side by side comparisons of API standards using a common API definition standard (AIPs). However I don't think the current AIP numbering system would facilitate that. You might be able to say range 150-160 are reserved for Resource definitions, but what happens if a AIP implementor has 20 different custom AIPs they want for Resources. I think a hierarchical approach might be best here, although I like the idea of AIPs (for their name sake) having specific numbers/ids that identify them.
I think there might be an opportunity here to define an AIP specification here that governs how these standards can be defined.
However, all this said, I think the best place to start is with a de-Googled AIP infrastructure that has no AIPs in it and allow adopters to fork and populate their own AIPs using the patterns you have provided.
Hi, assuming that I'd like to adopt the format into my organisation, but as an internal portal rather than part of the public aip.dev. Is there a tool that can help building the portal (navigation tree, css, etc) from the sources?
@danbars, There is not a tool specific to AIPs, but you should be able to fork the repo and run it under your own domain on GitHub Pages or -- with a little more effort -- your own Jekyll server.
There is some guidance under forking here that would be a good place to start.
i am assuming that when forking the repo to run it standalone a little cleanup and config is necessary/possible. at the very least:
i am interested to play around with this a little, but instead of me just doing this for myself, i am wondering if there's any interest in maybe fleshing out these "here's how to do your own AIPs" instructions.
We actually ended up writing AIPs in our own internal documentation system, and the part that we borrowed from this repo was the concept itself, the process, and a bunch of AIPs that made sense for our organization. We initially thought to also take the documentation build pipeline, but gave it up in order to keep all our docs in one place.
On Fri, Oct 29, 2021 at 2:50 PM Erik Wilde @.***> wrote:
i am assuming that when forking the repo to run it standalone a little cleanup and config is necessary/possible. at the very least:
- remove the actual AIPs.
- do some basic github/jekyll config (this is described a little bit)
- do some branding for this to become the ACME AIP page instead of the Google one.
i am interested to play around with this a little, but instead of me just doing this for myself, i am wondering if there's any interest in maybe fleshing out these "here's how to do your own AIPs" instructions.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/aip-dev/google.aip.dev/issues/98#issuecomment-954679768, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABOVDO5OAOXSEG3DPUIZ5MLUJKKBLANCNFSM4HMPLTVA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
On 2021-10-29 22:27, danbars wrote:
We actually ended up writing AIPs in our own internal documentation system, and the part that we borrowed from this repo was the concept itself, the process, and a bunch of AIPs that made sense for our organization. We initially thought to also take the documentation build pipeline, but gave it up in order to keep all our docs in one place.
this makes me curious. wouldn't taking the repo (without the AIPs or only some selected AIPs) and then adding your own AIPs mean that you do have everything in one place? that's definitely what i am after, so i am wondering what was keeping you from going that route.
That was my original intent. But then I thought that it's better to have everything in same internal documentation portal that we already have instead of having AIPs separated. Keeping this repo and just updating the content would mean that we will have aip.company-portal.com separated from docs.company-portal.com that we already have.
בתאריך שבת, 30 באוק׳ 2021, 11:08, מאת Erik Wilde @.***
:
On 2021-10-29 22:27, danbars wrote:
We actually ended up writing AIPs in our own internal documentation system, and the part that we borrowed from this repo was the concept itself, the process, and a bunch of AIPs that made sense for our organization. We initially thought to also take the documentation build pipeline, but gave it up in order to keep all our docs in one place.
this makes me curious. wouldn't taking the repo (without the AIPs or only some selected AIPs) and then adding your own AIPs mean that you do have everything in one place? that's definitely what i am after, so i am wondering what was keeping you from going that route.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/aip-dev/google.aip.dev/issues/98#issuecomment-955170143, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABOVDO2DF4VI34IVK6CNH2TUJORWPANCNFSM4HMPLTVA . Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
Most Definitely
The current thinking is to have a separate GitHub repository that is forkable and can redirect for everything that is not aip-9xxx and serve the 9xxx AIPs directly from the repo