I think I'm fine either way. I lean toward the simplicity of the strings in
the proposal but would not complain if we went with Yufei's suggestion.

On Thu, Aug 15, 2024 at 12:12 PM Yufei Gu <flyrain...@gmail.com> wrote:

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

-- 
Ryan Blue
Databricks

Reply via email to