aip-dev / google.aip.dev

API Improvement Proposals. https://aip.dev/
Other
1.09k stars 500 forks source link

Define and document process for adopting AIPs in other orgs #98

Open jgeewax opened 5 years ago

jgeewax commented 5 years ago

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

rhamiltonsf commented 4 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:

AIP Specification

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.

Meta AIPs

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:

Guidance AIPs

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

Additional Considerations

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.

The Point

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.

danbars commented 3 years ago

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?

rhamiltonsf commented 3 years ago

@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.

dret commented 3 years ago

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.

danbars commented 3 years ago

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.

dret commented 3 years ago

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.

danbars commented 3 years ago

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.

Tma38banmarino1 commented 1 month ago

Most Definitely