-1 on changing the path for the existing table APIs. People already have production systems pointing to Polaris endpoints and I don't think there's a strong reason to force them to migrate. I think adding new prefixes for new functionality is fine, but adding new features shouldn't break existing behavior without a very strong reason.
Mike On Thu, Feb 27, 2025 at 10:55 AM Robert Stupp <sn...@snazy.de> wrote: > WRT to the term "generic", I suspect that it can evolve to a more > generic catalog API, that could also expose functionality for Iceberg > tables + views and isn't limited to "generic tables" (too many different > meanings of "generic" there...). So not a fan of using the term > "generic" in a REST API (base) path. > > Although I'd prefer to keep the existing base paths, even if > /api/catalog isn't "prominently telling" that it's actually Iceberg > REST, the proposals > * /api/catalog/iceberg and > * /api/catalog/polaris > are probably clearer and easier for users to understand. > > So +1 on migrating Iceberg REST from /api/catalog to > /api/catalog/iceberg and adding /api/catalog/polaris. The then "legacy" > endpoint /api/catalog/v1 however should then be deprecated for removal > (Polaris 1.0?). > > For that API we need a (new) set of types. I'd really prefer to not > reuse types from a spec that the Polaris project doesn't own. > > A (controversial) thing is how to represent fully-qualified identifiers > (think: table-identifer and namespace-elements) as path-parameters. > Iceberg uses 0x1F as the element separator, but that is a control > character, which can be problematic. I'd propose to use a different > escaping that is in 99.9% of all cases both easy/intuitive to read and > write and prevents control characters and ambiguous paths ([1]). > Reference: [2] > > Robert > > [1] Jakarta Servlet Spec 6.0 - > > https://jakarta.ee/specifications/servlet/6.0/jakarta-servlet-spec-6.0#uri-path-canonicalization > [2] > > https://github.com/projectnessie/nessie/blob/fbbbf8ae7ac0d961997c685afd32d5dceed90efc/api/model/src/main/java/org/projectnessie/model/Elements.java#L80-L121 > > On 25.02.25 00:48, yun zou wrote: > > "If Polaris were to add new endpoints under /catalog/v1 and then Iceberg > > releases a v2 REST Catalog API what happens to the Polaris-specific > > endpoints?" > > > > -- I think that is a great point, I am actually with Dmitri now -- a new > > prefix could be beneficial for Polaris API to evolve independently in the > > future. > > > > For the new prefix name part, I think we will definitely need to continue > > supporting the /catalog/v1 for the Iceberg V1 APIs to avoid breaking any > > client that already works with Polaris today. Maybe when Iceberg evolves > to > > v2, we can start moving then to /catalog/iceberg/. > > > > For our new set of APIs includes generic tables and policy, maybe even > > volume move on, I actually prefer /catalog/polaris, like Dmitri > mentioned, > > it indicates clearly that set of API evolves by Polaris, and we can embed > > all new object specific APIs under this prefix. > > > > Best Regards, > > Yun > > > > On Mon, Feb 24, 2025 at 2:50 PM Dmitri Bourlatchkov <di...@apache.org> > > wrote: > > > >> The current /catalog/v1 URI prefix encapsulates the Iceberg REST Catalog > >> API. This API is not owned by Polaris. > >> > >> If Polaris were to add new endpoints under /catalog/v1 and then Iceberg > >> releases a v2 REST Catalog API what happens to the Polaris-specific > >> endpoints? What if Iceberg adds an endpoint that matches the Polaris > >> endpoint URI (unlikely but possible)? > >> > >> From my POV this is the primary reason for putting the new API under a > >> different prefix. > >> > >> A secondary concern is that listing methods in the Iceberg REST API will > >> certainly not include entities created via the proposed new API, so > mixing > >> new create endpoints with old lising endpoints does not make sense to me > >> from the REST API design perspective. > >> > >> As for a practical proposal, how about the following? > >> > >> * /catalog/v1 - remains supported for Iceberg REST API v1, but > deprecated > >> and will not be used for v2. > >> * /catalog/iceberg/ - encapsulates the Iceberg REST API v1 (and future > API > >> versions). > >> * /catalog/generic/v1 - the API proposed in the referenced document. > >> * /management - current Polaris Management API. > >> > >> Now, "generic" is, of course, a naming concern. Other opinions are > welcome > >> regarding how to call the new API. > >> > >> Options that look reasonable to me (in order of preference): > >> > >> * /catalog/polaris/v1 - this implies that Polaris evolves this API as > the > >> primary API for all things catalogued by Polaris (not including roles, > >> grants, etc., which fall under /management) > >> * /catalog/api/v1 - same as above, but different path segment > >> * /catalog/storage-object/v1 > >> * /catalog/generic/v1 - Works fine for the current proposal, but it will > >> look awkward if we have to add typed / specialized endpoints later (so > >> those API extensions may need yet another prefix). > >> * /catalog/generic-table/v1 - same as above > >> * /catalog/storage-entity/v1 > >> > >> Cheers, > >> Dmitri. > >> > >> On Mon, Feb 24, 2025 at 3:10 PM yun zou <yunzou.colost...@gmail.com> > >> wrote: > >> > >>> Hi All, > >>> > >>> Thanks all for attending the review today and providing your valuable > >>> feedback, I really appreciate it ! And apologize for the late notice > for > >>> the review meeting here. > >>> > >>> I think we had a good discussion, and agreed to > >>> 1) Move on to provide a new Spark Catalog Plugin and new set of APIs > with > >>> restricted scope to table managements, but keep the doors open for > future > >>> extensions includes new fields or even new APIs. > >>> 2) Update the field create_at_ms to catalog_register_at to be more > clear > >>> that the timestamp is for the registration time with Polaris. > >>> > >>> We will start working on figuring out more implementation details for > the > >>> plugins as well as refactoring needed for Apache Polaris. If it turns > out > >>> too complicated, we can have a separate review or discussion about the > >>> implementation part also. > >>> > >>> As a follow up of the meeting, we would like to open this thread for > >>> discussion for the URI prefix for the new endpoint. As Dmitri brought > up > >> on > >>> the design doc, since this set of APIs are new and not restricted by > >>> Iceberg anymore, shall we introduce a new prefix like > >> /polaris/catalog/v1/ > >>> instead of reuse the current /catalog/v1? > >>> > >>> I think my concern about this proposal is that it seems to diverge how > >> the > >>> APIs path are formalized today, the APIs in Polaris today use a path > that > >>> is prefixed by functionality, like /catalog/ or /management/. If we > start > >>> using /polaris/catalog/, shall we change the /management also to > >>> /polaris/management ? Shall we move the new Policy Engine related APIs > to > >>> /polaris/catalog also? > >>> > >>> Another choice we have is to use /polaris-catalog/v1 instead > /catalog/v1 > >> as > >>> a prefix, which aligns with the current API path better. Then we have > the > >>> same question, what do we do with the Policy Engine APIs? The Policies > >> can > >>> eventually be applied to both table entities created through the > /catalog > >>> APIs and /polaris/catalog APIs. > >>> > >>> Overall, I would prefer to stay consistent with the current APIs and > >>> continue to use /catalog/v1, since regardless of Iceberg or Generic > >> tables, > >>> they are just entities managed by Polaris, and the APIs don't have > >>> 'iceberg' in the path also. I would like to hear what people think > about > >>> this? > >>> > >>> Link to the doc: > >>> > >>> > >> > https://docs.google.com/document/d/1_R9jBIwoH3CV9G7gSoRJPQVEcOsROp4IEiGoeYeQE8A/edit?pli=1&tab=t.0 > >>> Best Regards, > >>> Yun > >>> > -- > Robert Stupp > @snazy > >