-
Proposal:
Show
Propose we support Entity References as described in https://www.oasis-open.org/apps/org/workgroup/odata/download.php/48082/latest with a preference of odata.allow-references
Accepted: https://www.oasis-open.org/committees/download.php/48097/odata-meeting-23_on-20130130_31-F2F-minutes.html#odata-199
-
Resolution:
Show
https://www.oasis-open.org/committees/download.php/48217/odata-core-v1.0-wd01-part2-url-conventions-2013-2-11-MP.docx
https://www.oasis-open.org/committees/download.php/48216/odata-core-v1.0-wd01-part1-protocol-2013-2-11-MP.docx
https://www.oasis-open.org/committees/download.php/48215/odata-json-format-v1.0-wd01-2013-2-11-MP.docx
https://www.oasis-open.org/committees/download.php/48214/odata-atom-format-v1.0-wd01-2013-2-11-MP.docx
https://tools.oasis-open.org/version-control/browse/wsvn/odata/trunk/spec/ABNF/odata-abnf-construction-rules-v1.0-wd01.txt?rev=179
https://tools.oasis-open.org/version-control/browse/wsvn/odata/trunk/spec/ABNF/odata-abnf-testcases.xml?rev=179
Accepted: https://www.oasis-open.org/committees/download.php/48269/odata-meeting-25_on-20130214-minutes.html#odata-199
Today, specifying $expand may return the same item multiple times. For example, if the someone is really popular, selecting ~people/$expand=friends may return the same friend for multiple people. This can lead to payload bloat when attempting to select a graph of related entities.
A simple means of compression would be to allow the service to return only the id of related entities that have already been returned within a feed. This would work nicely for existing clients that track incoming entities as they generally already have logic to merge with or simply return previously retrieved objects.
We might consider a preference to allow the client to request whether or not duplicate ids are returned in full, and pick a default behavior for the service if the client doesn't specify a preference. We could use the defined return=minimal for this; currently this is used in PUT/POST to say don't return results if they haven't changed, but are undefined for a GET operation in OData.
{"report":{"apdex":0.5,"isInitial":true,"journeyId":"5ee6956f-1217-43e0-87a5-45dbf9b2f171","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":2346.5,"redirectCount":0,"resourceLoadedEnd":2416.5999999046326,"resourceLoadedStart":217.40000009536743,"resourceTiming":[{"duration":19.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":217.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":217.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":236.90000009536743,"responseStart":0,"secureConnectionStart":0},{"duration":19.699999809265137,"initiatorType":"link","name":"https://issues.oasis-open.org/s/7d2823769c2e7b66e860863fe879b7f8-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/css/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&richediton=true","startTime":217.80000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":217.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":237.5,"responseStart":0,"secureConnectionStart":0},{"duration":19.59999990463257,"initiatorType":"link","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.css","startTime":218,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":218,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":237.59999990463257,"responseStart":0,"secureConnectionStart":0},{"duration":19.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/645acc233eb869f48a571293b8358a7d-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static-adgs/jira.webresources:global-static-adgs.css","startTime":218.2000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":218.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":237.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":20.300000190734863,"initiatorType":"link","name":"https://issues.oasis-open.org/s/a0dd6509771c1de0667aae5429c04cda-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:global-static/jira.webresources:global-static.css","startTime":218.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":218.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":238.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":282.30000019073486,"initiatorType":"script","name":"https://issues.oasis-open.org/s/e5479157e7a0c08b005e6522f2f04104-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/js/_super/batch.js?locale=en-US","startTime":218.59999990463257,"connectEnd":291.2000002861023,"connectStart":240.59999990463257,"domainLookupEnd":240.59999990463257,"domainLookupStart":240.59999990463257,"fetchStart":218.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":291.30000019073486,"responseEnd":500.90000009536743,"responseStart":326.40000009536743,"secureConnectionStart":265.7000002861023},{"duration":1951.7999997138977,"initiatorType":"script","name":"https://issues.oasis-open.org/s/83514d5d4e8543747b02042eafcdc99c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/9aebb1c0aaa4c36289529757ec9dbb54/_/download/contextbatch/js/project.issue.navigator,jira.view.issue,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":219.2000002861023,"connectEnd":349.80000019073486,"connectStart":299.5,"domainLookupEnd":299.5,"domainLookupStart":299.5,"fetchStart":219.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":349.80000019073486,"responseEnd":2171,"responseStart":381.59999990463257,"secureConnectionStart":324.40000009536743},{"duration":155.69999980926514,"initiatorType":"script","name":"https://issues.oasis-open.org/s/70bb2263e59e7e1f04fbd137c80b895b-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/aae1242f5fc81cc6a5bb8bc963ccda29/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en-US","startTime":219.30000019073486,"connectEnd":346.7000002861023,"connectStart":296,"domainLookupEnd":296,"domainLookupStart":295.90000009536743,"fetchStart":219.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":346.90000009536743,"responseEnd":375,"responseStart":374.2000002861023,"secureConnectionStart":321},{"duration":163.7000002861023,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":219.59999990463257,"connectEnd":352.90000009536743,"connectStart":302.2000002861023,"domainLookupEnd":302.2000002861023,"domainLookupStart":302,"fetchStart":219.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":353.09999990463257,"responseEnd":383.30000019073486,"responseStart":381.09999990463257,"secureConnectionStart":327.5},{"duration":162.7999997138977,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":219.7000002861023,"connectEnd":353.5,"connectStart":302.7000002861023,"domainLookupEnd":302.7000002861023,"domainLookupStart":302.7000002861023,"fetchStart":219.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":353.59999990463257,"responseEnd":382.5,"responseStart":380.5,"secureConnectionStart":327.80000019073486},{"duration":172.40000009536743,"initiatorType":"script","name":"https://issues.oasis-open.org/s/cda37faab827dbdf305de8efe8282062-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/8.0.5/_/download/batch/com.atlassian.auiplugin:split_aui.pattern.label/com.atlassian.auiplugin:split_aui.pattern.label.js?locale=en-US","startTime":219.90000009536743,"connectEnd":364.59999990463257,"connectStart":314.09999990463257,"domainLookupEnd":314.09999990463257,"domainLookupStart":314.09999990463257,"fetchStart":219.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":364.7000002861023,"responseEnd":392.30000019073486,"responseStart":391.5,"secureConnectionStart":339.09999990463257},{"duration":28.200000286102295,"initiatorType":"link","name":"https://issues.oasis-open.org/s/07245784f53abc49bad9d9d4d36c577a-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/cadc4f20cc5c138dee060d42cf85f220/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":220.09999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":220.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":248.30000019073486,"responseStart":0,"secureConnectionStart":0},{"duration":233,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":220.09999990463257,"connectEnd":425,"connectStart":374.90000009536743,"domainLookupEnd":374.90000009536743,"domainLookupStart":374.90000009536743,"fetchStart":220.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":425.30000019073486,"responseEnd":453.09999990463257,"responseStart":452.30000019073486,"secureConnectionStart":399.59999990463257},{"duration":47.80000019073486,"initiatorType":"link","name":"https://issues.oasis-open.org/s/f77fd89aa211a76b20e9b0e63564383c-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.css?jira.create.linked.issue=true&richediton=true","startTime":262.90000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":262.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":310.7000002861023,"responseStart":0,"secureConnectionStart":0},{"duration":1593.8000001907349,"initiatorType":"script","name":"https://issues.oasis-open.org/s/41525c48ddceeb9b11e54085268fc285-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/4a9288299d147101bf66484f4be48925/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-jira.view.issue,-project.issue.navigator/batch.js?jira.create.linked.issue=true&locale=en-US&richediton=true","startTime":263.09999990463257,"connectEnd":1827.8000001907349,"connectStart":1777.3000001907349,"domainLookupEnd":1777.3000001907349,"domainLookupStart":1777.3000001907349,"fetchStart":263.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":1828.3000001907349,"responseEnd":1856.9000000953674,"responseStart":1856.0999999046326,"secureConnectionStart":1802.3000001907349},{"duration":1612,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":642.9000000953674,"connectEnd":2220.9000000953674,"connectStart":2170.5999999046326,"domainLookupEnd":2170.5999999046326,"domainLookupStart":2170.5,"fetchStart":642.9000000953674,"redirectEnd":0,"redirectStart":0,"requestStart":2221,"responseEnd":2254.9000000953674,"responseStart":2252.5999999046326,"secureConnectionStart":2195.4000000953674}],"threshold":1000,"fetchStart":0,"domainLookupStart":39,"domainLookupEnd":62,"connectStart":62,"connectEnd":150,"secureConnectionStart":88,"requestStart":150,"responseStart":209,"responseEnd":302,"domLoading":212,"domInteractive":2436,"domContentLoadedEventStart":2436,"domContentLoadedEventEnd":2485,"domComplete":2892,"loadEventStart":2892,"loadEventEnd":2894,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"61d32f90d66969","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":118,"dbReadsTimeInMs":28,"dbConnsTimeInMs":35,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
I suppose it would be fair to presume that the first occurrence of an entity would be returned correct. What would happen if we have the same entity type at multiple levels? For example, in the example above with people and their friends, presuming friends are people as well, what would happen if a friend, that occurs more then once as a friend of other people, is in the set of people as well? Would I only see the complete entity of that person/friend at the people level only, at the friend level if that particular person was referenced as a friend before his occurrence in the people set or both? Not to be leading but I'm guessing the latter also because the projection of the entities at the various levels could be different as well correct?