I guess this is the library in question: https://github.com/marcinn/restosaur (took some effort to find it!). Thanks, if I decide to stick with the API-first approach, I'll use it. Either way, I've bookmarked it for future use. :-)
Regards, Ankush Thakur On Mon, Feb 27, 2017 at 7:53 PM, <[email protected]> wrote: > I was limited by DRF long days ago and I realized that it is not following > REST architecutre. It does good job in automation in exposing models over > http, but everything else is way complicated. > But there were no problem mix both tools in one project. DRF was for "80%" > of work and my lib for the rest. Downsides? Two libs used to get the job > done. > > Maybe try using DRF's @api_view decorator for function views, and return a > pure and manually "flattened" dict? > > M. > > > On Monday, February 27, 2017 at 3:17:35 PM UTC+1, Ankush Thakur wrote: >> >> Hmmm. That's not an answer I wanted to hear, really, but I like it. I'm >> myself finding DRF too restrictive once you are past the effort-saving >> magic. Thank you. I might give it up as it's still early days in the >> project. >> >> >> Regards, >> Ankush Thakur >> >> On Mon, Feb 27, 2017 at 7:43 PM, <[email protected]> wrote: >> >>> I'm not sure you want to read my answer, really... I've finally stopped >>> using DRF and wrote own library which is focused on resources, linking and >>> representations. >>> I think you can do some customization in DRF, probably you ca declare >>> custom serializer class, but this is a hard way, IMO. >>> >>> I like simple things, so with my lib I can just do something like that: >>> >>> payments = api.resource('/payments/') >>> customer = api.resource('/customers/:pk') >>> >>> >>> @payments.representation >>> def payment_as_json(payment, ctx): >>> return { >>> 'customer_address': payment.customer.address, >>> 'customer_url': ctx.link_to(customer, pk=payment.customer_id), # >>> link resources >>> 'value': payment.value, # write here >>> 'and_so_on': True, # what do you want >>> } >>> >>> Yes, it does not validate automatically and this example is not restful, >>> but you may follow semantic structures like jsonld without any limitation, >>> and apply validation in a controller: >>> >>> @payments.post(accept='application/json') >>> def add_payment(ctx): >>> form = PaymentForm(data=ctx.body) >>> form.is_valid() and form.save(0 >>> [...] >>> >>> Where PaymentForm may be a typical Django Form or ModelForm, or even a >>> Colander Schema. >>> There is more code to write, but implementation is more explitic. >>> >>> PEP20: Explicit is better than implicit. Simple is better than complex. >>> Flat is better than nested. Readability counts. And so on... >>> >>> BR, >>> Marcin >>> >>> >>> >>> On Monday, February 27, 2017 at 2:52:46 PM UTC+1, Ankush Thakur wrote: >>>> >>>> Marcin, that's exactly where I'm stuck! I know endpoints should never >>>> be 1:1 serialization of models, but I just don't know how to do that. I >>>> mean, I've been able to create endpoints like "/customers/1/payments/" >>>> where I use model relationships to generate JSON structures where Customer >>>> contains a Payments array field. My Address endpoint seems to be an oddity, >>>> as API consumers don't expect the city to contain state and the state to >>>> contain country as a JSON structure. How can I add these to the top-level >>>> Address entity directly while serialization? That's where I have no >>>> answers. Would it be possible for you to point me towards some article that >>>> does that? Thanks in advance! >>>> >>>> Regards, >>>> Ankush >>>> >>>> On Monday, February 27, 2017 at 3:41:49 AM UTC+5:30, >>>> [email protected] wrote: >>>>> >>>>> >>>>> >>>>> On Tuesday, February 21, 2017 at 8:13:25 PM UTC+1, Ankush Thakur wrote: >>>>>> >>>>>> If the relationship chain was even deeper, there would be even more >>>>>> nesting, which I feel isn't great for API consumers. What is the best >>>>>> practice here to put state and country at the same level as the city? >>>>>> >>>>> >>>>> Just follow REST design. >>>>> Forget django models, think about encapsulation. >>>>> Think about representation of a resource, not about serializing a >>>>> model(s). >>>>> Make semantic representations, as good as possible. >>>>> >>>>> You are not forced to do any nested nasty things. This has nothing to >>>>> do with REST api. >>>>> You may feel that DRF is limiting you. You'll be on a good path, if >>>>> so. :) >>>>> >>>>> Good luck! >>>>> Marcin >>>>> >>>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "Django users" group. >>> To unsubscribe from this topic, visit https://groups.google.com/d/to >>> pic/django-users/ttoJbZJOBnU/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/django-users. >>> To view this discussion on the web visit https://groups.google.com/d/ms >>> gid/django-users/a0b23023-8a5c-4257-ad6d-d72639f85925%40googlegroups.com >>> <https://groups.google.com/d/msgid/django-users/a0b23023-8a5c-4257-ad6d-d72639f85925%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to a topic in the > Google Groups "Django users" group. > To unsubscribe from this topic, visit https://groups.google.com/d/ > topic/django-users/ttoJbZJOBnU/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/django-users. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/django-users/8dbe0176-7fcd-4736-a0ba-78aee3408ac1%40googlegroups.com > <https://groups.google.com/d/msgid/django-users/8dbe0176-7fcd-4736-a0ba-78aee3408ac1%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CALX%3DrKLx31PgMUWVm6g6yT%3DH-Bgz-JfF7%3Daf2cZa-gZzgP5pjQ%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.

