When generating API stubs with the scaffold utility using, e.g., `python -m localstack.aws.scaffold sns`,
the scaffold creates method names from operation names, which are ugly when acronyms (subsequent uppercase characters that belong together).

Example:
`CreateSMSSandboxPhoneNumber` -> `create_s_m_s_sandbox_phone_number`

it would be nicer to have `create_sms_sandbox_phone_number`

This is a limitation of this method: https://github.com/localstack/localstack/blob/1888e66b85d7e6a8ee457bc7a732984fcf7aa830/localstack/utils/common.py#L978-L979
"""Extract request data either from query string as well as request body (e.g., for POST)."""
    result = {}
    headers = headers or {}
    content_type = headers.get("Content-Type", "")
    
    parsed_path = urlparse(path)
    result.update(parse_qs(parsed_path.query))
    
    if method in ["POST", "PUT", "PATCH"] and (not content_type or "form-" in content_type):
        
        try:
            params = parse_qs(to_str(data or ""))
            result.update(params)
        except Exception:
            pass  
    
    result = {k: v[0] for k, v in result.items()}
    return result
def first_char_to_lower(s: str) -> str: