Comments (5)
This is a good question, and one my team has struggled with solving too. I briefly looked at some solutions around the internet. Things like protocol buffers try and solve this by setting up a shared resource of schemas for data. My only concern with that is: you then have the problem of controlling the distribution of that protocol buffer.
We solved this (we === the team at my current employment) by having our own UserSerializer
in our domain. Because it was "our" version of the User, even though the User came from a different domain.
from django-api-domains.
@pedrogimenez very good idea. I like it! Can you share any code examples? I can promote this issue into a question for prosperity.
from django-api-domains.
We finally solved it using a RelatedField that interacts with the UserInterface in the Outfits domain. This way we don't cross boundaries.
from django-api-domains.
I'm still not sure if this is the best approach but here's our implementation:
# com.outfits.serializers
from com.outfits.interfaces import UserInterface
class UserField(serializers.RelatedField):
def to_representation(self, value):
return UserInterface.get_user(id=value)
class OutfitSerializer(serializers.HyperlinkedModelSerializer):
user = UserField(read_only=True)
class Meta:
model = Outfit
fields = ['shortcode', 'user', 'url']
# com.outfits.interfaces
from com.users.apis import UserAPI
class UserInterface:
@staticmethod
def get_user(*, id: int) -> Dict:
return UserAPI.get(id=id)
As I said above, the OutfitSerializer sends the get_user message to the UserInterface. This way, when you need to retrieve the user serialization, you do it through the ACL.
from django-api-domains.
I actually really like this pattern. I can foresee some performance issues if those interfaces are joining over network calls, but that would be a good opportunity to start keeping a shadow copy of the User in the Outfit serializer. But that only makes sense if you need a few attributes off of User. If you need the whole thing, it's a hard coupling to avoid.
from django-api-domains.
Related Issues (20)
- [FEEDBACK] Please, take a look at the dry-python project.
- [FEEDBACK] Further clarify the role of interfaces.py HOT 10
- [QUESTION] Can you provide an example using DRF?
- [FEEDBACK] Dry-Python HOT 3
- [FEEDBACK]Isn't this styleguide encouraging anemic domain models? HOT 2
- [QUESTION] What's the best way to handle errors between apps? HOT 3
- [QUESTION] Restrictions on data types that services may return. HOT 2
- [QUESTION] Model relationships between domains. HOT 3
- [FEEDBACK] Can cover your thoughts on value object? HOT 2
- [FEEDBACK] Clarify with DRF HOT 5
- [QUESTION] How do you handle models that are used in more than 1 domain/app? HOT 4
- [FEEDBACK] Thoughts on foreign key fetching? HOT 1
- [Question] Thoughts on where/how permissions are enforced? HOT 2
- [FEEDBACK] What about rich models? HOT 2
- [QUESTION] Models required across multiple domains HOT 1
- What's next? HOT 9
- [FEEDBACK] - Domain Rules numbered list issue
- [FEEDBACK] Example needs more than one domain HOT 2
- [FEEDBACK] Change "All data returned from APIs must be JSON serializable." HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from django-api-domains.