-
Proposal:
Show
Clients MUST specify a content-id header for each request within a changeset.
Servers MAY return responses within a changeset in any order.
Servers MUST include the content-id header in each response, so clients can correlate requests and responses.
Accepted: https://www.oasis-open.org/apps/org/workgroup/odata/download.php/47764/latest/odata-meeting-19_on-20121220-minutes.html
-
Resolution:
Show
https://www.oasis-open.org/committees/download.php/48439/odata-core-v4.0-wd01-part1-protocol-2013-03-05-RH.doc
Accepted: https://www.oasis-open.org/committees/download.php/48549/odata-meeting-29_on-20130314-minutes.html#odata-157
The current $batch specification says that requests within a changeset need not be processed in the same order they are specified. For example, a service may re-order changes to reduce the likelihood of integrity violations by first doing deletes, then inserts, then updates. It goes on to say that the responses in a changeset must be 1:1 with the requests, but does not say they must be in the same order, and does not say how a client correlates a response within a changeset with a particular request within that changeset.
Changesets do describe the use of a content-id header for allowing a statement within a batch to reference the results of a previous statement within the batch. For example, to add an order to a customer that was added within the same batch. However, it does not say that it is mandatory for the client to specify the content-id header for requests within a batch, nor does it say that it is mandatory for a service to return content-id headers supplied within the batch.
It seems simplest to say that clients SHOULD specify a content-id header for requests within a changeset, and that service MUST return the content-id (if any) specified by the client. This allows the service to re-order changes within the changeset without having to buffer the response, and is arguably simpler for the client to correlate responses without having to rely on ordering.
{"report":{"apdex":0.5,"isInitial":true,"journeyId":"5cd0f286-5201-47e8-9de4-94afb334dfad","key":"jira.project.issue.view-issue","navigationType":0,"readyForUser":3729.2000002861023,"redirectCount":0,"resourceLoadedEnd":3803.0999999046326,"resourceLoadedStart":434.80000019073486,"resourceTiming":[{"duration":216.5,"initiatorType":"link","name":"https://issues.oasis-open.org/s/3edeca31ab9ba77980aae0809fbe7121-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/0a4716d29b2d5b1bdcdb168b4efc119e/_/download/contextbatch/css/_super/batch.css","startTime":434.80000019073486,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":434.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":651.3000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":216.59999990463257,"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":435.2000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":435.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":651.8000001907349,"responseStart":0,"secureConnectionStart":0},{"duration":217.09999990463257,"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":435.40000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":435.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":652.5,"responseStart":0,"secureConnectionStart":0},{"duration":217.19999980926514,"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":435.7000002861023,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":435.7000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":652.9000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":217.59999990463257,"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":435.90000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":435.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":653.5,"responseStart":0,"secureConnectionStart":0},{"duration":1278.9000000953674,"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":436.09999990463257,"connectEnd":1499.3000001907349,"connectStart":1448.5999999046326,"domainLookupEnd":1448.5999999046326,"domainLookupStart":1448.5999999046326,"fetchStart":436.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":1499.4000000953674,"responseEnd":1715,"responseStart":1539.5999999046326,"secureConnectionStart":1473.5999999046326},{"duration":3102.0999999046326,"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":436.80000019073486,"connectEnd":1604.4000000953674,"connectStart":1553.7000002861023,"domainLookupEnd":1553.7000002861023,"domainLookupStart":1553.7000002861023,"fetchStart":436.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":1604.7000002861023,"responseEnd":3538.9000000953674,"responseStart":1634.5999999046326,"secureConnectionStart":1578.7000002861023},{"duration":1117,"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":436.90000009536743,"connectEnd":1526.3000001907349,"connectStart":1475.7000002861023,"domainLookupEnd":1475.7000002861023,"domainLookupStart":1475.7000002861023,"fetchStart":436.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":1526.3000001907349,"responseEnd":1553.9000000953674,"responseStart":1553.0999999046326,"secureConnectionStart":1500.7000002861023},{"duration":1356.2000002861023,"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":437.09999990463257,"connectEnd":1765.3000001907349,"connectStart":1714.9000000953674,"domainLookupEnd":1714.9000000953674,"domainLookupStart":1714.9000000953674,"fetchStart":437.09999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":1765.5,"responseEnd":1793.3000001907349,"responseStart":1792.4000000953674,"secureConnectionStart":1739.8000001907349},{"duration":1436.1999998092651,"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":437.30000019073486,"connectEnd":1843.7000002861023,"connectStart":1793.2000002861023,"domainLookupEnd":1793.2000002861023,"domainLookupStart":1793.2000002861023,"fetchStart":437.30000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":1843.7000002861023,"responseEnd":1873.5,"responseStart":1872.2000002861023,"secureConnectionStart":1818.2000002861023},{"duration":1516.0999999046326,"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":437.40000009536743,"connectEnd":1923.7000002861023,"connectStart":1873.4000000953674,"domainLookupEnd":1873.4000000953674,"domainLookupStart":1873.4000000953674,"fetchStart":437.40000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":1923.8000001907349,"responseEnd":1953.5,"responseStart":1952.4000000953674,"secureConnectionStart":1898.2000002861023},{"duration":222.80000019073486,"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":437.59999990463257,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":437.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":660.4000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":1594.4000000953674,"initiatorType":"script","name":"https://issues.oasis-open.org/rest/api/1.0/shortcuts/803004/a29179d70fa8562374ee16707692af77/shortcuts.js?context=issuenavigation&context=issueaction","startTime":437.80000019073486,"connectEnd":2003.8000001907349,"connectStart":1953.5,"domainLookupEnd":1953.5,"domainLookupStart":1953.4000000953674,"fetchStart":437.80000019073486,"redirectEnd":0,"redirectStart":0,"requestStart":2004,"responseEnd":2032.2000002861023,"responseStart":2031.3000001907349,"secureConnectionStart":1978.3000001907349},{"duration":206.5,"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":481.90000009536743,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":481.90000009536743,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":688.4000000953674,"responseStart":0,"secureConnectionStart":0},{"duration":1874.7999997138977,"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":482.2000002861023,"connectEnd":2324.7000002861023,"connectStart":2274.5,"domainLookupEnd":2274.5,"domainLookupStart":2274.4000000953674,"fetchStart":482.2000002861023,"redirectEnd":0,"redirectStart":0,"requestStart":2324.800000190735,"responseEnd":2357,"responseStart":2355.300000190735,"secureConnectionStart":2299},{"duration":2266.6000003814697,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":506.59999990463257,"connectEnd":2745.0999999046326,"connectStart":2694.2000002861023,"domainLookupEnd":2694.2000002861023,"domainLookupStart":2694.2000002861023,"fetchStart":506.59999990463257,"redirectEnd":0,"redirectStart":0,"requestStart":2745.0999999046326,"responseEnd":2773.2000002861023,"responseStart":2772.0999999046326,"secureConnectionStart":2719.300000190735},{"duration":2280.5999999046326,"initiatorType":"script","name":"https://issues.oasis-open.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/nu8zej/803004/aeedb5937bed650f2f0cc4ec9ceaa5d3/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":525.3000001907349,"connectEnd":2773.7000002861023,"connectStart":2722.800000190735,"domainLookupEnd":2722.800000190735,"domainLookupStart":2722.7000002861023,"fetchStart":525.3000001907349,"redirectEnd":0,"redirectStart":0,"requestStart":2774,"responseEnd":2805.9000000953674,"responseStart":2804.300000190735,"secureConnectionStart":2747.7000002861023},{"duration":766.0999999046326,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":1846,"connectEnd":2580.2000002861023,"connectStart":2530,"domainLookupEnd":2530,"domainLookupStart":2530,"fetchStart":1846,"redirectEnd":0,"redirectStart":0,"requestStart":2580.300000190735,"responseEnd":2612.0999999046326,"responseStart":2611.4000000953674,"secureConnectionStart":2554.9000000953674},{"duration":101,"initiatorType":"xmlhttprequest","name":"https://issues.oasis-open.org/rest/webResources/1.0/resources","startTime":3596.0999999046326,"connectEnd":3596.0999999046326,"connectStart":3596.0999999046326,"domainLookupEnd":3596.0999999046326,"domainLookupStart":3596.0999999046326,"fetchStart":3596.0999999046326,"redirectEnd":0,"redirectStart":0,"requestStart":3596.0999999046326,"responseEnd":3697.0999999046326,"responseStart":3697,"secureConnectionStart":3596.0999999046326}],"threshold":1000,"fetchStart":0,"domainLookupStart":162,"domainLookupEnd":217,"connectStart":217,"connectEnd":306,"secureConnectionStart":243,"requestStart":306,"responseStart":375,"responseEnd":524,"domLoading":378,"domInteractive":3812,"domContentLoadedEventStart":3813,"domContentLoadedEventEnd":3882,"domComplete":3951,"loadEventStart":3951,"loadEventEnd":3954,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[],"measures":[],"correlationId":"b97f8beb84a6ef","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":188,"dbReadsTimeInMs":26,"dbConnsTimeInMs":32,"applicationHash":"4d4040e0714d65b7fffa4801569d014c0b16eaa9","experiments":[]}}
Re-ordering responses only makes sense if the client actually specified a content-id in each request part. If we leave the choice to the client, we must limit the choice for the server.
Adapted proposal accordingly.