Architectural suggestions for (Django + API)

48 views
Skip to first unread message

julio....@m2agro.com.br

unread,
Aug 16, 2015, 6:59:04 PM8/16/15
to Django users
Hey guys,

I have a question about an architectural issue and I would like to hear some suggestions about it.

I created a project using Django (let's call this Project A) and now I decided to start a new one but this time it is an API using Django REST. So, for now I have to refactor Project A to consume data from API, but in order to do that I need to duplicate all my models files in both projects. The question is how can I avoid this? Is there another way to do that?

I see that moving models from Project A to API as something natural but to have an empty models file in Project A I need to change some concepts, for removing ModelForms and put all validation logic using Form.

How do you guys see this? Would you recommend something different? Is that a good idea?
  1. Project A (Models) <---> API (same models??? How can I handle that?)
  2. Project A (No models) <---> API (Models)
Thanks in advance!

James Schneider

unread,
Aug 16, 2015, 7:13:37 PM8/16/15
to django...@googlegroups.com

Are you adding REST functionality to an existing project? Or will you be using a separate instance to provide only REST services and maintain two different code bases?

I believe you can use the django-rest-framework to utilize the same views (literally) to provide a REST interface, so you may not need to rewrite or copy anything, just add a few bits of code to make your views aware of incoming REST requests, some URL additions, and serializers for your models.

http://www.django-rest-framework.org/

-James

--
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 django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/11d2f88e-a159-4e7b-903f-80d0f6e8e74a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Carl Meyer

unread,
Aug 17, 2015, 12:27:07 AM8/17/15
to django...@googlegroups.com
Hi Julio,

On 08/16/2015 04:59 PM, julio....@m2agro.com.br wrote:
> I created a project using Django (let's call this Project A) and now I
> decided to start a new one but this time it is an API using Django REST.
> So, for now I have to refactor Project A to consume data from API, but
> in order to do that I need to duplicate all my models files in both
> projects. The question is how can I avoid this? Is there another way to
> do that?

I don't quite understand why the situation you describe requires
duplicating models files. Is the canonical data storage now in Project B
instead of Project A, and Project A gets the data via Project B's REST
API? In that case, why does Project A need those models anymore?

> I see that /moving models /from Project A to API as something natural
> but to have an empty models file in Project A I need to change some
> concepts, for removing ModelForms and put all validation logic using Form.

Well, yes, but it seems to me that those types of changes in the Project
A codebase will be required regardless, since it now wants to save the
data via a REST API, not to its own database. How does a ModelForm help
with that?

> How do you guys see this? Would you recommend something different? Is
> that a good idea?
>
> 1. Project A (Models) <---> API (same models??? How can I handle that?)
> 2. Project A (No models) <---> API (Models)

The latter. I don't understand how the first option would even work.

But if you _do_ want to share some models between two projects, for
whatever reason, you can do it the same way you'd share any other code:
put the models in a reusable app and install it in both projects.

Carl

signature.asc

julio....@m2agro.com.br

unread,
Aug 17, 2015, 8:40:29 AM8/17/15
to Django users
Hi James,

I'm going to build a separated instance to provide only REST services to be consumed by Project A. It's ok to use the same views to provide a REST interface in API but in this case I need to remove models from project A, right?

Thank you very much!

julio....@m2agro.com.br

unread,
Aug 17, 2015, 8:42:28 AM8/17/15
to Django users
Hi Carl,
 
I don't quite understand why the situation you describe requires 
duplicating models files. Is the canonical data storage now in Project B 
instead of Project A, and Project A gets the data via Project B's REST 
API? In that case, why does Project A need those models anymore? 

Yes, that's it. I was thinking to maintain those models in Project A just because of the ModelForms, but now ... it seems a bad idea. In this case, I will need some refactor to use Form instead of ModelForm and after that I can't see any problem. You're right!

I will use this approach. Thank you very much!
Reply all
Reply to author
Forward
0 new messages