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/
> 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/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 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%3DrK%2BOxWenwEJwFfHeeY8ipVuWo7Uz4YqoNtHNXEYYz-aRZQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to