[Pulp-list] Client Refactoring
Jay Dobies
jason.dobies at redhat.com
Mon Jul 25 15:34:00 UTC 2011
On 07/25/2011 11:28 AM, James Slagle wrote:
> On Mon, Jul 25, 2011 at 10:10:57AM -0400, Jay Dobies wrote:
>> What about things like query calls? Are they then defined in the
>> objects themselves and each object exposes a number of query_*
>> methods that indicate the possibilties?
>
> Not sure what you mean by query calls. If you mean the ability to pass in
> arbitrary key/value pairs such that the server constructs a query based on the
> input, I think those same types of calls could still be supported as they are
> today.
>
>> I'm not a huge fan of this approach, but more generally I'm not a
>> fan of the pure REST approach we've been taking either. It sounds
>> great for simple use cases (single resource, trying to create/delete
>> it). But I think it's ultimately going to be limiting in terms of
>> developing an API that's actually useful.
>
> I'm only really talking about developing a client library that interfaces
> easily with the server API we already have. I don't mean to suggest changes
> to the server side as part of this effort.
>
> Right now we have a REST server API. However, we have a client api library
> that sometimes acts if it's xmlrpc. E.g., calling methods with long argument
> lists instead of working with resources directly. Personally, I think it
> would be a little easier if we exposed the resources, as models using Python
> classes, in the client. If we have an API that is too hard to use, or can't
> be used by interacting via resources in the REST-ful way, I'd argue the API
> could be improved.
>
> Keep in mind, this is somewhat orthogonal to the client refactoring, this is
> just something I noticed and thought it would be good to get on the radar.
>
>> It's the things that cross "resource" boundaries that complicate it.
>> When adding a package to a repo, where does that fall? Is that
>> .create() in package? Is that .add_package() in repo?
>
> I'd say whichever way it's done on the server. If you go against /repo to add
> packages to it, it would be on repo, etc.
>
>> We currently have a big issue in our API on how bad our status APIs
>> are. Everything is broken down into individual resources which just
>> doesn't make sense from a usefulness perspective. I have to get the
>> repo, then get it's sync list, then get the sync entry to get to
>> actual useful data. That's going to be somewhat annoying if we have
>> to dig through an object model to get at all that, as compared to
>> providing an api call that just says "get_latest_sync(repo_id)".
>
> There's no reason why you couldn't have a repo.get_latest_sync(), where repo
> is an instance of the model. I'd even say if this is a very common operation,
> the server should support it natively. You're right, it shouldn't be that
> hard to do it from a client, nor should "business logic" be required in the
> client. The server should support it natively by having a URL like:
>
> /pulp/api/repos/<repo_id>/latest_sync
>
> which returns the latest sync.
>
>> I also think this is going to start to fall apart when we start
>> trying to optimize queries. We're talking about absurdly large sets
>> of data, so we're going to need to take performance into account
>> early on. If we tie the client lib so tightly into an object model
>> then I suspect we're going to be shoehorning in advanced
>> (cross-object, derived fields, etc) queries later.
>
> I think the server should support this stuff, or at least have a mechanism to
> build a dynamic query so that this stuff is computed server side. Kind of
> like what was done for package groups with and/or logic. We don't want the
> client to have to get the full list of groups, and then do and/or logic on the
> large data set. The server should be doing the query, and returning the
> result set.
I didn't frame my comments right. I'm totally in favor of where you're
going with this. Only thing I want to see more of are the low level
specifics when its done. I kinda went off on a tangent on REST stuff
that was kinda off topic (bear with me, still buried under e-mails and
not quite thinking straight :)
> --
> -- James Slagle
> --
>
> _______________________________________________
> Pulp-list mailing list
> Pulp-list at redhat.com
> https://www.redhat.com/mailman/listinfo/pulp-list
--
Jay Dobies
RHCE# 805008743336126
Freenode: jdob @ #pulp
http://pulpproject.org | http://blog.pulpproject.org
More information about the Pulp-list
mailing list