[openstack-dev] [api] REST limitations and GraghQL inception?
Gilles Dubreuil
gdubreui at redhat.com
Fri May 4 04:41:18 UTC 2018
Actually Mutations fields are only data to be displayed, if needed, by
the response.
The data changes comes with the parameters.
So the correct mutation syntax is:
mutation rebootServer {
updateServer(id: <UUID>) {
reboot(type: "HARD")
}
}
Also the latter example would be a "data API" equivalent using CRUD
function like "updateServer"
And the following example would be a "plane API" equivalent approach
with an action function:
mutation hardReboot {
rebootServer(id: <UUID>, type: "HARD")
}
Sorry for the initial confusion but I think this is important because
GraphQL schema helps clarify data and the operations.
On 04/05/18 13:20, Gilles Dubreuil wrote:
>
> On 04/05/18 05:34, Fox, Kevin M wrote:
>> k8s does that I think by separating desired state from actual state
>> and working to bring the two inline. the same could (maybe even
>> should) be done to openstack. But your right, that is not a small
>> amount of work.
>
> K8s makes perfect sense to follow declarative approach.
>
> That said a mutation following control plane API action semantic could
> be very similar:
>
> mutation rebootServer {
> Server(id: <UUID>) {
> reboot: {
> type: "HARD"
> }
> }
> }
>
>
> "rebootServer" being an alias to name the request.
>
>
>> Even without using GraphQL, Making the api more declarative anyway,
>> has advantages.
>
> +1
>
>> Thanks,
>> Kevin
>> ________________________________________
>> From: Jay Pipes [jaypipes at gmail.com]
>> Sent: Thursday, May 03, 2018 10:50 AM
>> To: openstack-dev at lists.openstack.org
>> Subject: Re: [openstack-dev] [api] REST limitations and GraghQL
>> inception?
>>
>> On 05/03/2018 12:57 PM, Ed Leafe wrote:
>>> On May 2, 2018, at 2:40 AM, Gilles Dubreuil <gdubreui at redhat.com>
>>> wrote:
>>>>> • We should get a common consensus before all projects start to
>>>>> implement it.
>>>> This is going to be raised during the API SIG weekly meeting later
>>>> this week.
>>>> API developers (at least one) from every project are strongly
>>>> welcomed to participate.
>>>> I suppose it makes sense for the API SIG to be the place to discuss
>>>> it, at least initially.
>>> It was indeed discussed, and we think that it would be a worthwhile
>>> experiment. But it would be a difficult, if not impossible, proposal
>>> to have adopted OpenStack-wide without some data to back it up. So
>>> what we thought would be a good starting point would be to have a
>>> group of individuals interested in GraphQL form an informal team and
>>> proceed to wrap one OpenStack API as a proof-of-concept. Monty
>>> Taylor suggested Neutron as an excellent candidate, as its API
>>> exposes things at an individual table level, requiring the client to
>>> join that information to get the answers they need.
>>>
>>> Once that is done, we could examine the results, and use them as the
>>> basis for proceeding with something more comprehensive. Does that
>>> sound like a good approach to (all of) you?
>> Did anyone bring up the differences between control plane APIs and data
>> APIs and the applicability of GraphQL to the latter and not the former?
>>
>> For example, a control plane API to reboot a server instance looks like
>> this:
>>
>> POST /servers/{uuid}/action
>> {
>> "reboot" : {
>> "type" : "HARD"
>> }
>> }
>>
>> how does that map to GraphQL? Via GraphQL's "mutations" [0]? That
>> doesn't really work since the server object isn't being mutated. I mean,
>> the state of the server will *eventually* be mutated when the reboot
>> action starts kicking in (the above is an async operation returning a
>> 202 Accepted). But the act of hitting POST /servers/{uuid}/action
>> doesn't actually mutate the server's state.
>>
>> This is just one example of where GraphQL doesn't necessarily map well
>> to control plane APIs that happen to be built on top of REST/HTTP [1]
>>
>> Bottom line for me would be what is the perceivable benefit that all of
>> our users would receive given the (very costly) overhaul of our APIs
>> that would likely be required.
>>
>> Best,
>> -jay
>>
>> [0] http://graphql.org/learn/queries/#mutations
>> [1] One could argue (and I have in the past) that POST
>> /servers/{uuid}/action isn't a RESTful interface at all...
>>
>> __________________________________________________________________________
>>
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>> __________________________________________________________________________
>>
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
--
Gilles Dubreuil
Senior Software Engineer - Red Hat - Openstack DFG Integration
Email: gilles at redhat.com
GitHub/IRC: gildub
Mobile: +61 400 894 219
More information about the OpenStack-dev
mailing list