[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[PHP] handle properly multiple accept headers - #13844

Merged
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header
Oct 31, 2022
Merged

[PHP] handle properly multiple accept headers#13844
wing328 merged 2 commits into
OpenAPITools:masterfrom
thomasphansen:th_php_fix_accept_header

Conversation

@thomasphansen

@thomasphansenthomasphansen commented Oct 27, 2022

Copy link
Copy Markdown
Contributor

This fixes#12926 and addresses #728 for the specific PHP client.

When handling Accept headers, the current behavior of the php OpenAPIGenerator is:

  • If there is none in the api description, don't send one.
  • If one of them matches a "json-like" RE, send only "application/json" and ignore the others
  • otherwise, concatenate all them and send it.

The first and third behaviors are fine, but the second one has some issues:

  1. if the API description includes parameters for the "json-like" Accept header, they will be simply disregarded. This can be a problem if those parameters are mandatory for that API.
  2. scenarios like the one described in [BUG][PHP] Accept headers are discarding content types in favour of application/json #12926 cannot be solved without using a middleware in the http client, to change the Accept header just before sending the request. This is not a good experience for the user, IMO, since the proper Accept headers are already described in the OpenAPI description - we should just use them properly.

In order to solve this, both mentioned issues suggest using Quality Values (which I'll abbreviate as QV) to define the priority of the Accept headers. QV's are described in IETF RFC 9110, item 12.4.2, and their usage is described in the same RFC, item 12.5.1. Link to the RFC: https://www.rfc-editor.org/rfc/rfc9110.html#section-12.4.2

This PR implements a solution for a more convenient way of handling the Accept headers, using the following rules:

  1. if there is no Accept header, send none (same as before)
  2. if there is only one Accept header, send it unchanged
  3. if there are multiple Accept headers, but none are "json-like", send them all (same as before)
  4. otherwise, use QV's (weights) to give the highest priority to "application/json"-like headers, followed by other "json-like" headers, followed by all other headers.

This last rule can be a bit tricky, especially if the given Accept headers already have QV's. To handle this properly, this PR recalculates all quality codes, by splitting the headers in three categories ('application/json'-like, 'json'-like, 'non-json'-like), ordering each one by QV's and then attributing new QV's for all them, respecting the categories order (json-related first) and the internal order for each category.

But calculating the new values for the QV's is also a bit tricky: they vary from 0.001 to 1 (not having a QV implicitly means a value of 1), and most of the time get values like "q=0.9", "q=0.8" and so on. To create a sequence that emulates a "human" usage (and avoid values like "q=0.999", "q=0.998" etc), I used a logarithmic expression that generates a series like 1000, 900, 800, ... 100, 90, 80, ... 10, 9, 8 ... 2, 1, resulting in QV's like "q=1", "q=0.9", "q=0.8", ... "q=0.1", "q=0.09", "q=0.08" etc.

Since the series is limited, it will work perfectly for up to 28 headers with QV's - for more than that (which is extremely unlikely to happen, I'd say), the QV's will fallback to the poor "q=0.999"-like behavior - which is still valid according to the RFC.

More details can be found in the comments, directly in the code. New tests are also present, both for the headers selection and for the QV's generation.

Hope you guys like it! 😄

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (6.1.0) (minor release - breaking changes with fallbacks), 7.0.x (breaking changes without fallbacks)
  • If your PR is targeting a particular programming language, @mention the [technical committee]
    @jebentier, @dkarlovi, @mandrean, @jfastnacht, @ybelenko, @renepardon

Comment threadmodules/openapi-generator/src/main/resources/php/HeaderSelector.mustache Outdated
@wing328

Copy link
Copy Markdown
Member

@wing328
wing328 merged commit d6de9c1 into OpenAPITools:masterOct 31, 2022
@Pittiplatsch

Copy link
Copy Markdown

@thomasphansen Thanks for fixing 👍

@thomasphansen
thomasphansen deleted the th_php_fix_accept_header branch November 7, 2022 10:38
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG][PHP] Accept headers are discarding content types in favour of application/json

3 participants

@thomasphansen@wing328@Pittiplatsch