If we really want to add more structure to the JSON representation, then I
would probably prefer what Dmitri suggested in the doc as I think { "GET": {
}, "POST": {} } looks a bit weird:

"endpoints":[
  {"verb": "GET","path": "/v1/{prefix}/namespaces/{namespace}"},
  {"verb": "GET","path": "/v1/{prefix}/namespaces"},
  {"verb": "POST","path": "/v1/{prefix}/namespaces"}
]

What do people think of that?



On Fri, Aug 16, 2024 at 8:13 AM Walaa Eldin Moustafa <wa.moust...@gmail.com>
wrote:

> 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