The current proposal lists endpoints as plain strings, and I still believe
we could make things a bit smoother by adding some structure to them.
Here's the example if the previous one throws you off.

*Before:*

"GET /v1/{prefix}/namespaces","POST /v1/{prefix}/namespaces","GET
/v1/{prefix}/namespaces/{namespace}","DELETE
/v1/{prefix}/namespaces/{namespace}"

*After:*

{"/v1/{prefix}/namespaces": { "GET": {}, "POST": {} }
},{"/v1/{prefix}/namespaces/{namespace}": { "GET": {}, "DELETE": {} }
}

I think this approach would make the definitions more machine-readable and
easier to expand in the future. It's always good to plan for potential
changes, and this structure should help us adapt without much hassle.
Plus, we could use a trimmed OpenAPI schema for this, so we wouldn’t need
to create a new schema from scratch.

Yufei


On Thu, Aug 15, 2024 at 11:02 AM Jack Ye <yezhao...@gmail.com> wrote:

> > But I propose to use a trimmed openAPI's format directly.
> Looking at the example, this feels quite complicated to me.
>
> > For example, it is easier if we want to include operationID
> I don't think we need to consider accommodating both, since operationId is
> an alternative to "<HTTP VERB> <resource path from REST spec>".
>
> > or adding feature flags, or adding parameters
> For more advanced feature flags, those could likely directly go to
> overrides just like today, but given we limited the scope to service
> endpoint discovery, I think that is another discussion later.
>
> So the current proposed solution from Eduard still feels better to me. And
> I think the argument for ambiguity is pretty strong so I am good with the
> proposed approach to use "<HTTP VERB> <resource path from REST spec>".
>
> -Jack
>
>
>
>
>
> On Thu, Aug 15, 2024 at 9:46 AM Yufei Gu <flyrain...@gmail.com> wrote:
>
>> +1 for the proposal. In terms of the format, the current solution is
>> simple enough. But I propose to use a trimmed openAPI's format directly. It
>> won't add much cost as we can just take the minimum fields we want. But it
>> opens a window to extend it in the future. For example, it is easier if we
>> want to include operationID, or adding feature flags, or adding parameters.
>> Here is an example:
>>
>> {
>>
>>   "resources": [
>>
>>     {
>>
>>       "/v1/{prefix}/namespaces":
>>
>>         {
>>
>>           "GET": {
>>
>>           "description": "List all namespaces"
>>
>>           }
>>
>>         },
>>
>>         {
>>
>>           "POST": {
>>
>>           "description": "Create a new namespace"
>>
>>           }
>>
>>         }
>>
>>     },
>>
>>     {
>>
>>       "path2": {}
>>
>>     }
>>
>>   ...
>>
>>   ]
>>
>> }
>>
>>
>> Yufei
>>
>>
>> On Thu, Aug 15, 2024 at 8:47 AM Russell Spitzer <
>> russell.spit...@gmail.com> wrote:
>>
>>> I'm on board for this proposal. I was in the off-mail chats and I think
>>> this is probably our simplest approach going forward.
>>>
>>> On Thu, Aug 15, 2024 at 10:39 AM Dmitri Bourlatchkov
>>> <dmitri.bourlatch...@dremio.com.invalid> wrote:
>>>
>>>> OpenAPI tool will WARN a lot if Operation IDs overlap. Generated
>>>> code/html may also look odd in case of overlaps.
>>>>
>>>> All-in-all, I think the best practice is to define unique Operation IDs
>>>> up front.
>>>>
>>>> For Iceberg REST API, the yaml file is the API definition, so it should
>>>> not be a problem to ensure that Operation IDs are unique, I guess.
>>>>
>>>> Cheers,
>>>> Dmitri.
>>>>
>>>> On Thu, Aug 15, 2024 at 11:32 AM Eduard Tudenhöfner <
>>>> etudenhoef...@apache.org> wrote:
>>>>
>>>>> Hey Jack,
>>>>>
>>>>> thanks for the feedback. I replied in the doc but I can reiterate my
>>>>> answer here too: The *path* is unique and required so that feels more
>>>>> appropriate than requiring to have an optional *operationId* in the
>>>>> OpenAPI spec.
>>>>> Additionally, using the path is more straight-forward when we
>>>>> introduce v2 endpoints, while you would have to make sure that all
>>>>> *operationIds* are unique across endpoints (and I'm not sure if
>>>>> OpenAPI tools actually enforce uniqueness).
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Aug 15, 2024 at 5:20 PM Jack Ye <yezhao...@gmail.com> wrote:
>>>>>
>>>>>> Hi Eduard,
>>>>>>
>>>>>> In general I agree with this proposal, thanks for putting this up!
>>>>>> Just one question (which I also added in the design), what are the 
>>>>>> thoughts
>>>>>> behind using "<HTTP VERB> <resource path from REST spec>", vs using the
>>>>>> operationId defined in the OpenAPI?
>>>>>>
>>>>>> The operationId approach definitely looks much cleaner to me, but (1)
>>>>>> in OpenAPI it is not a requirement to define it, and (2) right now there
>>>>>> are some inconsistent operationIds, for example UpdateTable is the
>>>>>> operationId, but CommitTable is used for all request and response models.
>>>>>> But these are all pretty solvable issues because we can enforce 
>>>>>> operationId
>>>>>> to be required in the Iceberg spec, and fix it to be consistent, assuming
>>>>>> nobody is taking a dependency on these operationIds right now.
>>>>>>
>>>>>> Personally speaking, I am pretty neutral on this topic, but curious
>>>>>> what everyone thinks.
>>>>>>
>>>>>> Best,
>>>>>> Jack Ye
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Aug 14, 2024 at 9:20 AM Eduard Tudenhöfner <
>>>>>> etudenhoef...@apache.org> wrote:
>>>>>>
>>>>>>> Hey Dmitri,
>>>>>>>
>>>>>>> this proposal is the result of the community feedback from the
>>>>>>> Capabilities proposal. Ultimately the capabilities turned out to entail
>>>>>>> more complexity than necessary and so this proposal solves the core 
>>>>>>> problem
>>>>>>> while keeping complexity and spec changes to an absolute minimum.
>>>>>>>
>>>>>>> Eduard
>>>>>>>
>>>>>>> On Wed, Aug 14, 2024 at 5:15 PM Dmitri Bourlatchkov
>>>>>>> <dmitri.bourlatch...@dremio.com.invalid> wrote:
>>>>>>>
>>>>>>>> Hi Eduard,
>>>>>>>>
>>>>>>>> How is this proposal related to the Server Capabilities discussion?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Dmitri.
>>>>>>>>
>>>>>>>> On Wed, Aug 14, 2024 at 5:14 AM Eduard Tudenhöfner <
>>>>>>>> etudenhoef...@apache.org> wrote:
>>>>>>>>
>>>>>>>>> Hey everyone,
>>>>>>>>>
>>>>>>>>> I'd like to propose a way for REST servers to communicate to
>>>>>>>>> clients what endpoints it supports via a new *endpoints* field in
>>>>>>>>> the *CatalogConfig* of the *v1/config* endpoint.
>>>>>>>>>
>>>>>>>>> This enables clients to make better decisions and clearly signal
>>>>>>>>> that a particular endpoint isn’t supported.
>>>>>>>>>
>>>>>>>>> I opened #10937 <https://github.com/apache/iceberg/issues/10937> to
>>>>>>>>> track the proposal in GH. Please find the proposal doc here
>>>>>>>>> <https://docs.google.com/document/d/1krcIaLfxtBFDABU5ssLmf64zyHgE8BRncpGPIMTWlxo/edit?usp=sharing>
>>>>>>>>>  (estimated
>>>>>>>>> read time: 5 minutes). The proposal requires a Spec change, which can 
>>>>>>>>> be
>>>>>>>>> seen in #10928 <https://github.com/apache/iceberg/pull/10928>.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Eduard
>>>>>>>>>
>>>>>>>>

Reply via email to