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!