mydomain.com/shit_api/v1/person/123
That url is pretty straight forward, it's trying to get a person with an ID of 123 from shit_api. But that's not always clear cut.
I've been working on a particular API that needed a pair of optional filters that we're a pain to work out in a regular expression. And this is where I found about Django's QueryDict object. With it I can write out API urls with params:
mydomain.com/shit_api/v1/something/?filter1=value1&filter2=value2
And on the urls and views, I can handle it as such:
#urls.py urlpatterns = [ url(r'^parts/$', SomethingView.as_view()), name='Something'), ] ... #views.py class SomethingView(View): def get(self, request, *args, *kwargs): fiter1_value = request.GET.get('filter1', 'default') fiter2_value = request.GET.get('filter2', 'default') #do more here return Response('some response')
The thing here is that request.GET.get() method having a default value. This make it that having it on the URL it isn't a problem. So call like:
mydomain.com/shit_api/v1/something/
Will still work.
Bonus since I don't have to deal with a convoluted regular expression. Yehey!