Using multiple YAML files per API / API area sounds good to me.
We should definitely use the Iceberg REST API YAML without any
modifications to avoid accidental mistakes.
Cheers,
Dmitri.
On Tue, Jan 28, 2025 at 2:28 AM Honah J. <hon...@apache.org> wrote:
Hi everyone,
Thanks for the proposal and all the great discussion! I also agree that
we
should separate Polaris-only APIs from the IRC spec to keep the IRC spec
consistent with the upstream version. I’d like to propose another way to
achieve this, as some APIs may not need a separate prefix but are still
better kept in separate YAML files.
This is particularly useful for cases where new APIs logically belong
under
`/catalog` (e.g., the notification API) but should remain separate from
the
IRC YAML file for practical reasons. Similar cases will likely arise in
the
future.
To address this, we can split the OpenAPI spec into multiple YAML files
while keeping them grouped under the same prefix. This allows
Polaris-specific APIs to stay separate while ensuring the Iceberg spec
remains untouched. I tested this approach using policy management APIs in
PR
#856 <https://github.com/apache/polaris/pull/856>[1], based on this blog
post
<
https://techdocs.studio/blog/how-to-split-open-api-spec-into-multiple-files
[2].
With this approach, when a Polaris catalog-level API is later contributed
to Iceberg, we don’t need to re-route anything. We simply pull the latest
version from IRC (assuming it is merged) and remove it from the Polaris
YAML file. The API definitions remain the same—only their location
changes.
The downside of this approach is that it introduces additional references
across multiple YAML files.
Would love to hear your thoughts on this!
Best regards,
Honah
[1] https://github.com/apache/polaris/pull/856
[2]
https://techdocs.studio/blog/how-to-split-open-api-spec-into-multiple-files
On Thu, Jan 23, 2025 at 2:22 AM Jean-Baptiste Onofré <j...@nanthrax.net>
wrote:
Hi Jack,
Welcome back!
I like your idea to separate Iceberg REST Apis and Polaris REST Apis.
It's cleaner and it will certainly simplify the maintenance/update
(especially for the Iceberg REST APIs).
About the Polaris REST APIs, that's the idea: we start first in
Polaris but there is good chance to be proposed to Iceberg REST Spec.
As the "pace" between implementation and spec is different, the
purpose here is to start with an implementation and propose a generic
spec later.
I think we should also cleanly state the "scope" of the APIs related
to prefix. Imho, we are gathering too much APIs in /catalog and
/management: I think we should consider more fine-grained prefix
and/or inner prefix, else we may have to create a bunch of routes from
one prefix to another (when an API move from Polaris to Iceberg etc).
Regards
JB
On Wed, Jan 22, 2025 at 10:39 PM Yufei Gu <flyrain...@gmail.com>
wrote:
Thanks, Jack, for bringing this up! I think separating the Iceberg
REST
APIs from the other Polaris REST APIs is an excellent idea. Not only
does
it simplify any potential future rebases of the Iceberg REST spec,
but
it
also provides developers with a clearer distinction between the
different
sets of REST APIs.
To implement this, we may need to experiment with the auto-generation
tools. Feel free to file issues, or propose ideas.
Yufei
On Wed, Jan 22, 2025 at 1:30 PM Jack Ye <yezhao...@gmail.com> wrote:
Hi everyone,
I am starting to work on Polaris related tasks, and realize that
currently
the state of the spec folder [1] in the project is a bit
disorganized:
The Iceberg REST catalog (IRC) spec [2] contains non-standard APIs
like the
/notifications API, but misses a few APIs like the scan planning
ones.
There is the Polaris management service API spec [3] that seems to
record
the identity management APIs in Polaris and will never be a part of
the IRC
spec. But I see new proposals like policy [4] and volume [5] that
will
likely introduce new APIs, and I am not sure where those APIs would
go,
will they be in separate OpenAPI YAML files, or a part of the
management
service APIs, or do we expect them to be eventually a part of the
official
IRC spec?
I propose that we should agree upon a consistent framework to deal
with
these APIs, to allow users to more clearly understand different
types
of
APIs in Polaris, and allow developers to more easily and more
consistently
add new ones or update existing ones. The framework I have in mind
is
as
the following:
1. there will be in general 2 types of APIs: IRC APIs and Polaris
APIs. The
IRC APIs are precisely following the IRC spec, whereas the Polaris
APIs are
only available in a Polaris server. It is possible for some Polaris
APIs to
be developed first to unblock support of certain use cases, and
later
contributed back to the IRC spec, depending on the appetite of both
communities. If that happens, the Polaris API will be deprecated in
favor
of the official IRC API when it gets accepted in Iceberg.
2. For Polaris APIs, it is subdivided into different groups by
functionality, and these groups are physically separated into
different
YAML files. Currently there are 2 groups:
- Polaris management service
- Polaris notification service
And there can be new groups in the future for policy or volume if
those
proposals get accepted in Polaris.
What do we think?
Best,
Jack Ye
[1] https://github.com/apache/polaris/tree/main/spec
[2]
https://github.com/apache/polaris/blob/main/spec/rest-catalog-open-api.yaml
[3]
https://github.com/apache/polaris/blob/main/spec/polaris-management-service.yml
[4]
https://docs.google.com/document/d/1kIiVkFFg9tPa5SH70b9WwzbmclrzH3qWHKfCKXw5lbs/edit?tab=t.0#heading=h.nly223xz13km
[5]
https://docs.google.com/document/d/1ofljkrtiXRWc-v6hfkg_laKlYltepTPX7zsg44Tb-BY/edit?tab=t.0#heading=h.7ic5c343eju1