[Tutor] Best practice for API design handeling collections and single objects
Knacktus
knacktus at googlemail.com
Wed Sep 22 17:12:27 CEST 2010
Hi all,
I've got a question for you about how to best design an API that has to
handle requests for single objects and collections of those objects.
My naming conventions are: Plural nouns for collections, singular nouns
for single objects. "Key_to_value"-style for dictionaries. So I normaly
know in my code wether I'm handling collections, dicts or single types.
So, here's an simplified example:
#-----------------------------------------------------------------------
class Meals(object):
def __init__(self, id_on_menu_to_meal):
self.id_on_menu_to_meal = id_on_menu_to_meal
#-----------------------------------------------------------------------
Now I need to return one meal by one id_on_menu and also several meals
by several ids_on_menu.
I can think of three options:
1) create two methods:
#-----------------------------------------------------------------------
def get_meal_by_ident(self, ident):
return self.id_on_menu_to_meal[ident]
def get_meals_by_idents(self, idents):
return [self.get_meal_by_ident(ident) for ident in idents]
#-----------------------------------------------------------------------
2) create one method, which is smart enough to discriminate between the
input (having fun with the naming conventions ;-)):
#-----------------------------------------------------------------------
def get_meal_or_meals_by_ident_or_idents(self, ident_or_idents):
try:
return self.id_on_menu_to_meal[ident_or_idents]
except KeyError:
return [self.id_on_menu_to_meal[ident] for
ident in ident_or_idents]
#-----------------------------------------------------------------------
3) handle by convention application-wide only collections:
#-----------------------------------------------------------------------
def get_meals_by_idents(self, idents):
return [self.id_on_menu_to_meal[ident] for ident in idents]
#-----------------------------------------------------------------------
Without having too much experience on things like that, my gut feeling
tells me to use option 1). What would you guys consider as a best
practice here?
Thanks in advance and cheers,
Jan
More information about the Tutor
mailing list