rest - how to represent relationship value on parent for simple entities -


this question best practices , design patterns; i'm sure can go option depending on app, want develop backend best practices regardless of front app/client current needs are.

what best practice follow during api development when resource has one-many/many-many relation resource, okay add columns 1 resource other represent important column i'm sure mandatory needed ?

#example database may like:- event{  id: 1,  user_id: 1 } user:{  id: 1,  name: 'momen', } 

now respond /post/1

## option 1 event{   id:1,   user_id:1,   user:{    id:1,    name: momen,   } } ## option 2 events{ 1: event{   id:1,   user_id:1,   user_name: 'momen',// not include user object unless client request it.. inject user_name because it's data i'm sure post need } } 

the user object in above example can huge, , don't want whole user object, -unless app needs more info user- yet still need name display in list of events. okay add name event object fallback, if client dont have access user:1 in memory, can display column while fetching user.

q1 acceptable or i'm polluting object , introducing anomily bugs ?

in case of many-to-many relation; have flag want set, should set on parent entity or have include relation object well.

eventuser{  event_id: 1,  user_id: 1, } 

adding eventusers link table represents one-many relation,

q2. want set flag next event indicates if user querying events going event or not.

so in restful-api, respond get /events/1 request can

## option 1:  event{  id:1,  name: 'event 1',  is_going: true }  ## option 2 {   events:{ 1:{id:1, name:'event 1'} },   eventuser:{1:{ event_id: 1, user_id: 1},} // or {} if not going } 

its clear option1 easier implement , easier deal with.. mean again i'm introducing columns event model not exists. plus if client going cache such results offline-first usage, , user changes data wrong.

my experience api's more data bargained , objects highly decoupled.
in case keep users array of independent objects under events , allow on explicit results. can add fields optional parameter in api payload user can decide fields interesting (on side implement obj_res = _.pick(obj, fields) )

never concatenate objects, lead nightmare when objects change , grow on time. coupling bad :)


Comments

Popular posts from this blog

python - Selenium remoteWebDriver (& SauceLabs) Firefox moseMoveTo action exception -

html - How to custom Bootstrap grid height? -

transpose - Maple isnt executing function but prints function term -