Code Monkey home page Code Monkey logo

Comments (5)

phalt avatar phalt commented on July 27, 2024 2

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.

phalt avatar phalt commented on July 27, 2024 1

@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.

pedrogimenez avatar pedrogimenez commented on July 27, 2024

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.

pedrogimenez avatar pedrogimenez commented on July 27, 2024

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.

phalt avatar phalt commented on July 27, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.