如何在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}")
我尤为关注以下内容:
- 如何处理不同类型的响应(成功、验证错误等)
- 此场景下收发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
相关产品推荐
相关产品推荐

