cn2an HTTP API使用指南:为其他语言提供跨平台数字转化方案
【免费下载链接】cn2an📦 快速转化「中文数字」和「阿拉伯数字」~ (最新特性:分数,日期、温度等转化)项目地址: https://gitcode.com/gh_mirrors/cn/cn2an
cn2an是一个功能强大的Python工具包,专门用于中文数字与阿拉伯数字之间的快速转换。📦 对于非Python语言开发者或需要跨平台集成的情况,构建HTTP API是最高效的解决方案。本文将为您提供完整的cn2an HTTP API实现指南,帮助您为Java、JavaScript、Go等其他语言提供便捷的数字转化服务。
为什么需要cn2an HTTP API?🤔
在实际开发中,您可能遇到以下场景:
- 多语言系统集成:后端用Java,前端用JavaScript,都需要中文数字转换
- 微服务架构:不同服务用不同语言编写,需要统一的数字处理服务
- 跨平台应用:移动端、Web端、桌面端都需要数字转换功能
- 第三方系统对接:为合作伙伴提供标准化的API接口
cn2an HTTP API正是为了解决这些问题而设计的,让所有语言都能轻松使用中文数字转换功能!
快速搭建cn2an HTTP API服务 🚀
环境准备
首先确保您已经安装了Python 3.7+和cn2an:
# 克隆项目仓库 git clone https://gitcode.com/gh_mirrors/cn/cn2an # 安装cn2an cd cn2an pip install -e .使用Flask构建API服务
创建一个名为cn2an_api.py的文件:
from flask import Flask, request, jsonify import cn2an app = Flask(__name__) @app.route('/api/cn2an', methods=['POST']) def convert_cn2an(): """ 中文数字转阿拉伯数字 参数: - text: 要转换的文本 - mode: 转换模式(strict/normal/smart/direct) """ data = request.json text = data.get('text', '') mode = data.get('mode', 'strict') try: result = cn2an.cn2an(text, mode) return jsonify({ 'success': True, 'result': result, 'input': text, 'mode': mode }) except Exception as e: return jsonify({ 'success': False, 'error': str(e), 'input': text, 'mode': mode }), 400 @app.route('/api/an2cn', methods=['POST']) def convert_an2cn(): """ 阿拉伯数字转中文数字 参数: - text: 要转换的文本 - mode: 转换模式(low/up/rmb/direct) """ data = request.json text = data.get('text', '') mode = data.get('mode', 'low') try: result = cn2an.an2cn(text, mode) return jsonify({ 'success': True, 'result': result, 'input': text, 'mode': mode }) except Exception as e: return jsonify({ 'success': False, 'error': str(e), 'input': text, 'mode': mode }), 400 @app.route('/api/transform', methods=['POST']) def transform_text(): """ 句子中的数字转换 参数: - text: 要转换的文本 - method: 转换方法(cn2an/an2cn) - direct: 是否直接转换(True/False) """ data = request.json text = data.get('text', '') method = data.get('method', 'cn2an') direct = data.get('direct', False) try: result = cn2an.transform(text, method, direct) return jsonify({ 'success': True, 'result': result, 'input': text, 'method': method, 'direct': direct }) except Exception as e: return jsonify({ 'success': False, 'error': str(e), 'input': text, 'method': method, 'direct': direct }), 400 @app.route('/health', methods=['GET']) def health_check(): """健康检查接口""" return jsonify({ 'status': 'healthy', 'service': 'cn2an-api', 'version': cn2an.__version__ }) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000, debug=True)使用FastAPI构建高性能API
如果您需要更高的性能,可以使用FastAPI:
from fastapi import FastAPI, HTTPException from pydantic import BaseModel import cn2an app = FastAPI(title="cn2an API", version=cn2an.__version__) class ConvertRequest(BaseModel): text: str mode: str = "strict" class TransformRequest(BaseModel): text: str method: str = "cn2an" direct: bool = False @app.post("/api/cn2an") async def convert_cn2an(request: ConvertRequest): """中文数字转阿拉伯数字""" try: result = cn2an.cn2an(request.text, request.mode) return { "success": True, "result": result, "input": request.text, "mode": request.mode } except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.post("/api/an2cn") async def convert_an2cn(request: ConvertRequest): """阿拉伯数字转中文数字""" try: result = cn2an.an2cn(request.text, request.mode) return { "success": True, "result": result, "input": request.text, "mode": request.mode } except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.post("/api/transform") async def transform_text(request: TransformRequest): """句子中的数字转换""" try: result = cn2an.transform(request.text, request.method, request.direct) return { "success": True, "result": result, "input": request.text, "method": request.method, "direct": request.direct } except Exception as e: raise HTTPException(status_code=400, detail=str(e)) @app.get("/health") async def health_check(): """健康检查""" return {"status": "healthy", "version": cn2an.__version__}API接口详细说明 📋
1. 中文数字转阿拉伯数字接口
端点:POST /api/cn2an
请求参数:
{ "text": "一百二十三", "mode": "strict" }支持的模式:
strict:严格模式(默认),只转换标准中文数字normal:普通模式,转换"一二三"等简单数字smart:智能模式,转换混合格式如"1百23"direct:直接模式,逐字原样转换
响应示例:
{ "success": true, "result": 123, "input": "一百二十三", "mode": "strict" }2. 阿拉伯数字转中文数字接口
端点:POST /api/an2cn
请求参数:
{ "text": "123", "mode": "low" }支持的模式:
low:小写模式(默认),如"一百二十三"up:大写模式,如"壹佰贰拾叁"rmb:人民币模式,如"壹佰贰拾叁元整"direct:直接模式,逐字转换
响应示例:
{ "success": true, "result": "一百二十三", "input": "123", "mode": "low" }3. 句子转换接口
端点:POST /api/transform
请求参数:
{ "text": "小王捡了一百块钱", "method": "cn2an", "direct": false }支持的功能:
- 日期转换:"二〇〇一年三月四日" → "2001年3月4日"
- 分数转换:"二分之一" → "1/2"
- 百分比转换:"百分之五十" → "50%"
- 温度转换:"零下三度" → "-3°C"
客户端调用示例 💻
Python客户端
import requests # 中文数字转阿拉伯数字 response = requests.post("http://localhost:5000/api/cn2an", json={ "text": "一百二十三", "mode": "strict" }) print(response.json()) # 阿拉伯数字转中文数字 response = requests.post("http://localhost:5000/api/an2cn", json={ "text": "123", "mode": "low" }) print(response.json()) # 句子转换 response = requests.post("http://localhost:5000/api/transform", json={ "text": "小王捡了一百块钱", "method": "cn2an", "direct": False }) print(response.json())JavaScript客户端
// 中文数字转阿拉伯数字 async function cn2an(text, mode = 'strict') { const response = await fetch('http://localhost:5000/api/cn2an', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ text, mode }) }); return await response.json(); } // 阿拉伯数字转中文数字 async function an2cn(text, mode = 'low') { const response = await fetch('http://localhost:5000/api/an2cn', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ text, mode }) }); return await response.json(); } // 使用示例 cn2an('一百二十三').then(console.log); an2cn('123').then(console.log);Java客户端(使用HttpClient)
import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; public class Cn2anClient { private static final String API_URL = "http://localhost:5000/api"; public static String cn2an(String text, String mode) throws Exception { String json = String.format("{\"text\":\"%s\",\"mode\":\"%s\"}", text, mode); HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(API_URL + "/cn2an")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(json)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); return response.body(); } public static void main(String[] args) throws Exception { String result = cn2an("一百二十三", "strict"); System.out.println(result); } }部署与配置指南 🚀
Docker部署
创建Dockerfile:
FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY cn2an_api.py . COPY cn2an/ ./cn2an/ EXPOSE 5000 CMD ["python", "cn2an_api.py"]创建requirements.txt:
cn2an>=0.5.24 Flask>=2.0.0构建并运行:
docker build -t cn2an-api . docker run -p 5000:5000 cn2an-apiNginx反向代理配置
server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 添加限流 limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s; location /api/ { limit_req zone=api burst=20 nodelay; proxy_pass http://localhost:5000; } }性能优化建议 ⚡
1. 启用缓存
from functools import lru_cache import cn2an @lru_cache(maxsize=1000) def cached_cn2an(text, mode): return cn2an.cn2an(text, mode) @lru_cache(maxsize=1000) def cached_an2cn(text, mode): return cn2an.an2cn(text, mode)2. 使用异步处理
from fastapi import FastAPI import asyncio import cn2an app = FastAPI() @app.post("/api/cn2an") async def convert_cn2an_async(request: ConvertRequest): # 使用线程池处理CPU密集型任务 loop = asyncio.get_event_loop() result = await loop.run_in_executor( None, lambda: cn2an.cn2an(request.text, request.mode) ) return {"result": result}3. 批量处理接口
@app.post("/api/batch/cn2an") async def batch_cn2an(requests: List[ConvertRequest]): """批量转换接口""" results = [] for req in requests: try: result = cn2an.cn2an(req.text, req.mode) results.append({ "success": True, "result": result, "input": req.text, "mode": req.mode }) except Exception as e: results.append({ "success": False, "error": str(e), "input": req.text, "mode": req.mode }) return {"results": results}错误处理与监控 🔧
1. 统一错误处理
from flask import Flask, jsonify import traceback app = Flask(__name__) @app.errorhandler(Exception) def handle_exception(e): """全局异常处理""" return jsonify({ 'success': False, 'error': str(e), 'traceback': traceback.format_exc() if app.debug else None }), 500 @app.errorhandler(400) def handle_bad_request(e): return jsonify({ 'success': False, 'error': '请求参数错误', 'details': str(e) }), 4002. 添加日志记录
import logging from datetime import datetime logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(f'cn2an_api_{datetime.now().strftime("%Y%m%d")}.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) @app.route('/api/cn2an', methods=['POST']) def convert_cn2an(): data = request.json text = data.get('text', '') mode = data.get('mode', 'strict') logger.info(f"CN2AN请求: text={text}, mode={mode}") try: result = cn2an.cn2an(text, mode) logger.info(f"CN2AN成功: {text} -> {result}") return jsonify({ 'success': True, 'result': result, 'input': text, 'mode': mode }) except Exception as e: logger.error(f"CN2AN失败: {text}, 错误: {str(e)}") return jsonify({ 'success': False, 'error': str(e), 'input': text, 'mode': mode }), 400实际应用场景 🌟
1. 金融系统
# 人民币金额转换 def convert_rmb_amount(amount): """将阿拉伯数字金额转换为人民币大写""" response = requests.post("http://localhost:5000/api/an2cn", json={ "text": str(amount), "mode": "rmb" }) return response.json()["result"] # 使用示例 print(convert_rmb_amount(123456.78)) # 壹拾贰万叁仟肆佰伍拾陆元柒角捌分2. 文档处理系统
def process_document(text): """处理文档中的中文数字""" # 将文档中的中文数字转为阿拉伯数字 response = requests.post("http://localhost:5000/api/transform", json={ "text": text, "method": "cn2an" }) processed_text = response.json()["result"] # 进行其他处理... return processed_text3. 多语言Web应用
// 前端数字转换组件 class NumberConverter { constructor(apiUrl) { this.apiUrl = apiUrl; } async convertToChinese(number) { const response = await fetch(`${this.apiUrl}/api/an2cn`, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({text: number.toString(), mode: 'low'}) }); const data = await response.json(); return data.success ? data.result : number.toString(); } async convertToArabic(chineseNumber) { const response = await fetch(`${this.apiUrl}/api/cn2an`, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({text: chineseNumber, mode: 'strict'}) }); const data = await response.json(); return data.success ? data.result : chineseNumber; } }安全考虑 🔒
1. 输入验证
from flask import request, jsonify import re def validate_input(text, mode): """验证输入参数""" if not text or not isinstance(text, str): return False, "text参数不能为空且必须是字符串" if len(text) > 1000: # 限制输入长度 return False, "text参数长度不能超过1000个字符" # 防止SQL注入等攻击 if re.search(r'[<>&\'"]', text): return False, "text参数包含非法字符" valid_modes = ['strict', 'normal', 'smart', 'direct'] if mode not in valid_modes: return False, f"mode参数必须是{valid_modes}之一" return True, "" @app.route('/api/cn2an', methods=['POST']) def convert_cn2an(): data = request.json text = data.get('text', '') mode = data.get('mode', 'strict') # 验证输入 is_valid, error_msg = validate_input(text, mode) if not is_valid: return jsonify({ 'success': False, 'error': error_msg }), 400 # 继续处理...2. 速率限制
from flask_limiter import Limiter from flask_limiter.util import get_remote_address limiter = Limiter( app, key_func=get_remote_address, default_limits=["100 per minute", "10 per second"] ) @app.route('/api/cn2an', methods=['POST']) @limiter.limit("60 per minute") def convert_cn2an(): # 接口实现...总结与最佳实践 📝
通过本文的指南,您可以快速搭建一个功能完整、性能优越的cn2an HTTP API服务。以下是几个最佳实践建议:
- 选择合适的Web框架:对于简单应用使用Flask,对于高性能需求使用FastAPI
- 实现完善的错误处理:提供清晰的错误信息和状态码
- 添加监控和日志:便于问题排查和性能分析
- 考虑安全性:验证输入、限制速率、防止攻击
- 提供清晰的文档:让其他开发者能够轻松使用您的API
cn2an HTTP API不仅为Python开发者提供了便利,更为Java、JavaScript、Go等其他语言的开发者打开了中文数字转换的大门。无论您是构建金融系统、文档处理工具,还是多语言Web应用,cn2an HTTP API都能成为您可靠的数字转换解决方案!🎉
现在就开始搭建您的cn2an HTTP API服务,让中文数字转换变得简单而高效吧!
【免费下载链接】cn2an📦 快速转化「中文数字」和「阿拉伯数字」~ (最新特性:分数,日期、温度等转化)项目地址: https://gitcode.com/gh_mirrors/cn/cn2an
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考