Thank you Eduard for sharing this version of the proposal. Looks simple,
functional, and extensible.

On Thu, Aug 15, 2024 at 1:10 PM Ryan Blue <b...@databricks.com.invalid>
wrote:

> 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