[Mageia-webteam] Proposal for maintainers database API

nicolas vigier boklm at mars-attacks.org
Tue Mar 8 13:13:50 CET 2011


On Tue, 08 Mar 2011, Michael Scherer wrote:

> Le mardi 08 mars 2011 à 03:53 +0100, nicolas vigier a écrit :
> > Here is a proposal for an API that can be used on the maintainers
> > database, with the list of URLs and what they should do :
> > 
> > ***
> > An html page with the list of all packages, and their maintainer :
> > http://maintdb.mageia.org/packages.html
> > As we have many packages, the page will be long, so maybe we want to
> > split the list by first letter of package name :
> > http://maintdb.mageia.org/packages_a.html
> > http://maintdb.mageia.org/packages_b.html
> > http://maintdb.mageia.org/packages_c.html
> 
> Hi, 
> 
> Thee is other paging system in rails and similar framework, no need to
> specify this ( and I also think this is not part of a API ).

Yes, ok. Maybe I should not have mentioned html pages as they are probably
not needed.

> 
> > The list of all packages and their maintainers, in text format :
> > http://maintdb.mageia.org/packages.txt
> > With the output like this :
> > package1:maintainerlogin1
> > package2:maintainerlogin2
> > package3:maintainerlogin3
> > ...
> > 
> > ***
> > An html page to show the maintainer of one package (with
> > [packagename] replaced with the name of a package) :
> > http://maintdb.mageia.org/packages/[packagename].html
> > The same in text format :
> > http://maintdb.mageia.org/packages/[packagename].txt
> > With output like this (only one line):
> > packagename:maintainerlogin
> > If the package is unmaintained, it appears like this :
> > packagename:nobody
> > If the package does not exist, an empty file is returned.
> 
> I would rather say : 
> packagename: 
> 
> Using a name with a special meaning is just a special case to be placed
> everywhere.

Using an empty string is as much a special case as using 'nobody'. But I
would avoid using an empty string, as we cannot use empty string in URLs,
so it require a special case for the URL to list unmaintained packages.
It also require a special case for applications that display maintainer :
  "This package is maintained by nobody."
     or
  "This package is maintained by ."
In the 2nd case, applications have to handle a special case for
unmaintained packages. In the 1st case they can handle it too if they
want, but they don't have to.

> > ***
> > The list of maintainers (all maintainers who maintain at least one
> > package) :
> > http://maintdb.mageia.org/people.html
> > 
> > ***
> > The list of packages maintained by someone (with [loginname] replaced by
> > a login) :
> > http://maintdb.mageia.org/people/[loginname].html
> > And the same in text format :
> > http://maintdb.mageia.org/people/[loginname].txt
> > With the same format for output :
> > package1:loginname
> > package2:loginname
> > package3:loginname
> > ...
> > If the login does not exist, an empty file is returned.
> 
> A REST API would give a 404, that's also something everybdy doing HTTP
> should grasp and understand.

I think returning an empty list makes more sense than an error. A user
that does not exist in maintdb database doesn't mean that the user does
not exist, it only means he maintains 0 packages.

> > ***
> > The list of unmaintained packages :
> > http://maintdb.mageia.org/people/nobody.html
> > And the same in text format :
> > http://maintdb.mageia.org/people/nobody.txt
> > With this output :
> > package1:nobody
> > package2:nobody
> > package3:nobody
> > ...
> 
> I would use a different url for unmaintained packages rather than
> nobody. Adding special case is not very clean, as said before.

I think the special case would be to use a different URL for unmaintained
and maintained packages.

> 
> > ***
> > The URL to add a package, used by the buildsystem when a package is
> > uploaded on the repository :
> > https://maintdb.mageia.org/admin/setnewpackage
> > Protected with basic http authentication (with a login/password that was
> > set in maintdb or apache configuration).
> > Accessed with a POST request and the following two arguments :
> > package: [packagename]
> > maintainer: [maintainername]
> > If the package already exists in the database, it is not updated.
> > 
> > ***
> > The same as the previous URL, but the package maintainer is updated when
> > the package already exists in the database :
> > https://maintdb.mageia.org/admin/setpackage
> 
> IMHO, it would be easier to have just 1 url :
> 
> /upload/$package/$login/ ( and either protect this at http level, or
> using a key somewhere in the url )

According to this wikipedia page :
http://en.wikipedia.org/wiki/POST_%28HTTP%29#Affecting_server_state
"Per RFC 2616, the POST method should be used for any context in which a
request is non-idempotent: that is, it causes a change in server state
each time it is performed, such as submitting a comment to a blog post
or voting in an online poll."

So I think it's better to use a POST request in our case.

> > If we compare with the maintainers db website used at mandriva, their
> > version also has :
> >  - media name for each package, with pages to list packages from only
> >    one media
> >  - a search box to search for a package
> >  - links to bugzilla for each package
> > But I don't think we should store the media name in maintdb. 
> 
> That's indeed inflexible, if we want to have a package in more than one
> media.
> 
> > maintdb should mainly be used in the following cases :
> >  - by sophie, mageia-app-db and other package databases which want to show
> >    maintainers of packages. They download the full list of packages and
> >    maintainers every day (or hours) from the text file, to synchronize
> >    with their database.
> 
> So then we should ask them what they would prefer. I knw for usre that
> reusing the mandriva format, or the fedora format will ease the work on
> sophie side.

The mandriva format :
http://maint.mandriva.com/lookup.php

It's :
packagename	email at domain

I think using ':' instead '	' to separate package and maintainer is
not difficult to change in sophie. And I think ':' looks nicer, but it's
not very important so I don't really care which one we use.
However I don't think we should use email address to identify
maintainers. We are already using login name on svn and pkgsubmit, so we
should do the same in maintdb. And if applications need an email, they
can use "$login at mageia.org".


No comment about using the website to take/drop maintainership, or using
a command line tool ?



More information about the Mageia-webteam mailing list