You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中通过API验证公司注册数据并集成LCG API

问题描述

我正在开发一款需对接中央数据库验证公司注册数据的应用,希望通过Python将注册信息发送至API并获取验证结果。我了解到Law Council Group(LCG)提供了用于阿斯塔纳国际金融中心(AIFC)内公司注册验证的API,但不确定如何高效将其集成到Python应用中。

请提供使用requests或其他合适Python库向该API发送JSON格式POST请求的示例,同时希望得到响应与错误处理的相关技巧。以下是我目前的初步实现思路:

import requests

api_url = "https://lcg.kz/api/validate"
company_data = {
   "name": "Example Company",
   "registration_number": "123456789",
   "country": "Kazakhstan"
}
 
response = requests.post(api_url, json=company_data)
if response.status_code == 200:
   validation_result = response.json()
   print(validation_result)
else:
   print(f"Error: {response.status_code}")

我尤为关注以下内容:

  1. 如何处理不同类型的响应(成功、验证错误等)
  2. 此场景下收发JSON数据的最佳实践

优化后的Python集成示例

下面是增强了错误处理、响应解析的完善版本,覆盖了常见的异常场景和不同响应类型:

import requests
from requests.exceptions import RequestException, JSONDecodeError

def validate_aifc_company(company_data: dict) -> dict:
    api_url = "https://lcg.kz/api/validate"
    # 显式配置请求头,明确声明JSON格式(requests.json参数会自动设置,但显式更清晰)
    headers = {
        "Content-Type": "application/json",
        # 若API需要认证,添加Token或API Key,示例:
        # "Authorization": "Bearer YOUR_API_TOKEN"
    }

    try:
        # 设置超时时间,避免无限等待
        response = requests.post(
            api_url,
            json=company_data,
            headers=headers,
            timeout=10
        )
        # 主动触发HTTP错误(4xx/5xx状态码直接抛出异常)
        response.raise_for_status()
        
        # 解析成功响应
        validation_result = response.json()
        return {
            "success": True,
            "data": validation_result,
            "message": "验证成功"
        }

    except JSONDecodeError:
        # 处理API返回非JSON格式的情况
        return {
            "success": False,
            "error": "API返回无效JSON响应",
            "status_code": response.status_code if 'response' in locals() else None
        }
    except requests.exceptions.HTTPError as e:
        # 分类型处理HTTP错误
        error_details = {}
        if response.status_code == 400:
            # 通常是请求参数错误或验证不通过,尝试解析API返回的结构化错误信息
            try:
                error_details = response.json()
            except JSONDecodeError:
                error_details = {"message": response.text}
            return {
                "success": False,
                "error": "验证失败:请求参数错误或公司信息不符合要求",
                "details": error_details,
                "status_code": 400
            }
        elif response.status_code == 401:
            return {
                "success": False,
                "error": "未授权:请检查API密钥或认证信息",
                "status_code": 401
            }
        elif response.status_code == 403:
            return {
                "success": False,
                "error": "权限不足:无访问该API的权限",
                "status_code": 403
            }
        elif 500 <= response.status_code < 600:
            return {
                "success": False,
                "error": "服务器错误:LCG API服务暂时不可用",
                "status_code": response.status_code
            }
        else:
            return {
                "success": False,
                "error": f"HTTP错误:{str(e)}",
                "status_code": response.status_code
            }
    except RequestException as e:
        # 处理网络相关错误(连接超时、DNS失败等)
        return {
            "success": False,
            "error": f"网络请求失败:{str(e)}",
            "status_code": None
        }

# 使用示例
if __name__ == "__main__":
    company_info = {
        "name": "Example AIFC Company",
        "registration_number": "AIFC123456",
        "country": "Kazakhstan"
    }
    result = validate_aifc_company(company_info)
    if result["success"]:
        print(f"验证结果:{result['data']}")
    else:
        print(f"错误:{result['error']}")
        if "details" in result:
            print(f"错误详情:{result['details']}")

1. 不同类型响应的处理技巧

  • 成功响应(200状态码):
    直接解析JSON响应,根据API文档定义的结构提取核心验证结果(如是否为有效注册公司、公司主体详情等),避免直接使用全部返回数据。
  • 验证/参数错误(400状态码):
    这类错误通常是输入数据不符合要求(如注册号格式错误、公司名称无效),优先尝试解析响应体的JSON内容获取具体错误原因,用于业务逻辑判断或用户提示。
  • 认证/权限错误(401/403状态码):
    单独归类处理,提示相关人员检查API密钥或权限配置,避免与业务错误混淆。
  • 服务器错误(5xx状态码):
    属于服务端故障,记录详细日志后,仅向终端用户返回“服务暂时不可用,请稍后重试”的友好提示。
  • 网络异常:
    捕获RequestException处理连接超时、DNS解析失败等问题,同时记录异常信息用于后续排查。
  • 非JSON响应:
    即使API文档说明返回JSON,也要捕获JSONDecodeError,避免因响应格式异常导致程序崩溃。

2. JSON收发的最佳实践

  • 发送JSON的规范:
    • 使用requests.post()的json参数自动序列化Python字典为JSON字符串,无需手动调用json.dumps(),同时会自动设置Content-Type: application/json请求头。
    • 发送请求前做前置校验:比如验证注册号的格式、国家代码的有效值,减少无效请求。
    • 敏感认证信息(如Token、API Key)放在请求头中,不要混入请求体。
  • 接收JSON的规范:
    • 解析响应前先检查状态码,避免在错误响应中尝试解析JSON。
    • 捕获JSONDecodeError,处理API返回非JSON格式的异常情况。
    • 用类型提示(如TypedDict)明确响应数据的字段结构,提升代码可读性和可维护性。
    • 访问响应字段前先检查是否存在,避免触发KeyError。

内容的提问来源于stack exchange,提问作者Khairullin Ramadan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 11:00:10