1. 首页 > Linux教程 > 正文

Linux教程FG397-Web API开发基础

内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。

风哥提示:

文档介绍Web API开发的基础知识和实践方法。

Part01-Flask API开发

1.1 安装Flask

# 安装Flask
[root@linux ~]# pip3 install flask flask-restful

# 创建API应用
[root@linux ~]# cat > /fglinux/api_server.py << 'EOF' #!/usr/bin/env python3 # -*- coding: utf-8 -*- # api_server.py # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn from flask import Flask, jsonify, request from flask_restful import Resource, Api import psutil import socket import json app = Flask(__name__) api = Api(app) # 系统状态API class SystemStatus(Resource): def get(self): """获取系统状态""" return { 'hostname': socket.gethostname(), 'cpu_percent': psutil.cpu_percent(interval=1), 'memory_percent': psutil.virtual_memory().percent, 'disk_percent': psutil.disk_usage('/').percent, 'uptime': open('/proc/uptime').read().split()[0] } # 进程管理API class ProcessList(Resource): def get(self): """获取进程列表""" processes = [] for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']): processes.append({ 'pid': proc.info['pid'], 'name': proc.info['name'], 'cpu': proc.info['cpu_percent'], 'memory': proc.info['memory_percent'] }) return {'processes': processes[:20]} class ProcessDetail(Resource): def get(self, pid): """获取进程详情""" try: proc = psutil.Process(pid) return { 'pid': proc.pid, 'name': proc.name(), 'status': proc.status(), 'cpu_percent': proc.cpu_percent(), 'memory_percent': proc.memory_percent(), 'cmdline': ' '.join(proc.cmdline()) } except psutil.NoSuchProcess: return {'error': 'Process not found'}, 404 # 服务管理API class ServiceList(Resource): def get(self): """获取服务列表""" import subprocess result = subprocess.run(['systemctl', 'list-units', '--type=service', '--state=running'], capture_output=True, text=True) services = [] for line in result.stdout.split('\n')[1:]: if line.strip(): parts = line.split() if len(parts) >= 1 and parts[0].endswith(‘.service’):
services.append(parts[0])
return {‘services’: services[:20]}

class ServiceStatus(Resource):
def get(self, service_name):
“””获取服务状态”””
import subprocess
result = subprocess.run([‘systemctl’, ‘status’, service_name],
capture_output=True, text=True)
return {
‘service’: service_name,
‘active’: ‘active (running)’ in result.stdout,
‘output’: result.stdout[:500]
}

# 日志查询API
class LogQuery(Resource):
def get(self):
“””查询日志”””
log_file = request.args.get(‘file’, ‘/var/log/messages’)
lines = int(request.args.get(‘lines’, 50))

try:
with open(log_file, ‘r’) as f:
content = f.readlines()[-lines:]
return {‘log_file’: log_file, ‘lines’: len(content), ‘content’: content}
except FileNotFoundError:
return {‘error’: ‘Log file not found’}, 404

# 注册API路由
api.add_resource(SystemStatus, ‘/api/v1/system/status’)
api.add_resource(ProcessList, ‘/api/v1/processes’)
api.add_resource(ProcessDetail, ‘/api/v1/processes/‘)
api.add_resource(ServiceList, ‘/api/v1/services’)
api.add_resource(ServiceStatusfrom PG视频:www.itpux.com, ‘/api/v1/services/‘)
api.add_resource(LogQuery, ‘/api/v学习交流加群风哥微信: itpux-com1/logs’)

# 健康检查
@app.route(‘/health’)
def health():
return jsonify({‘status’: ‘healthy’})

if __name__ == ‘__main__’:
app.run(host=’0.0.0.0′, port=5000, debug=False)
EOF

# 启动API服务
[root@linux ~]# python3 /fglinux/api_server.py &
[1] 12345

# 测试API
[root@linux ~]# curl http://localhost:5000/health
{“status”: “healthy”}

[root@linux ~]# curl http://localhost:5000/api/v1/system/status
{
“hostname”: “linux.fgedu.net.cn”,
“cpu_percent”: 15.5,
“memory_percent”: 27.3,
“disk_percent”: 45.2,
“uptime”: “900000.00”
}

[root@linux ~]# curl http://localhost:5000/api/v1/processes | python3 -m json.tool | head -20
{
“processes”: [
{
“pid”: 1,
“name”: “systemd”,
“cpu”: 0.0,
“memory”: 0.5
},
{
“pid”: 456,
“name”: “nginx”,
“cpu”: 0.1,
“memory”: 1.2
}
]
}

[root@linux ~]# curl http://localhost:5000/api/v1/services/nginx.service
{
“service”: “nginx.service”,
“active”: true,
“output”: “● nginx.service – The nginx HTTP and reverse proxy server…”
}

Part02-API客户端

2.1 Python API客户端

# 创建API客户端
[root@linux ~]# cat > /fglinux/api_client.py << 'EOF' #!/usr/bin/env python3 # -*- coding: utf-8 -*- # api_client.py # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn import requests import json from datetime import datetime class APIClient: def __init__(self, base_url): self.base_url = base_url self.session = requests.Session() def get_system_status(self): """获取系统状态""" response = self.session.get(f"{self.base_url}/api/v1/system/status") return response.json() def get_processes(self): """获取进程列表""" response = self.session.get(f"{self.base_url}/api/v1/processes") return response.json() def get_process_detail(self, pid): """获取进程详情""" response = self.session.get(f"{self.base_url}/api/v1/processes/{pid}") return response.json() def get_services(self): """获取服务列表""" response = self.session.get(f"{self.base_url}/api/v1/services") return response.json() def get_service_status(self, service_name): """获取服务状态""" response = self.session.get(f"{self.base_url}/api/v1/services/{service_name}") return response.json() def get_logs(self, log_file, lines=50): """获取日志""" response = self.session.get( f"{self.base_url}/api/v1/logs", params={'file': log_file, 'lines': lines} ) return response.json() if __name__ == "__main__": client = APIClient("http://localhost:5000") print("=== 系统状态 ===") status = client.get_system_status() print(f"主机名: {status['hostname']}") print(f"CPU: {status['cpu_percent']}%") print(f"内存: {status['memory_percent']}%") print(f"磁盘: {status['disk_percent']}%") print("\n=== 进程列表 ===") processes = client.get_processes() for proc in processes['processes'][:5]: print(f"PID: {proc['pid']:6} 名称: {proc['name']:20} CPU: {proc['cpu']:5}%") print("\n=== 服务状态 ===") service = client.get_service_status('nginx.service') print(f"服务: {service['service']}") print(f"状态: {'运行中' if service['active'] else '已停止'}") print("\n=== 日志查询 ===") logs = client.get_logs('/var/log/messages', 5) print(f"日志文件: {logs['log_file']}") print(f"行数: {logs['lines']}") EOF # 执行客户端 [root@linux ~]# python3 /fglinux/api_client.py === 系统状态 === 主机名: linux.fgedu.net.cn CPU: 15.5% 内存: 27.3% 磁盘: 45.2% === 进程列表 === PID: 1 名称: systemd CPU: 0.0% PID: 456 名称: nginx CPU: 0.1% PID: 789 名称: mysql CPU: 0.2% PID: 1234 名称: python3 CPU: 1.0% PID: 2345 名称: sshd CPU: 0.0% === 服务状态 === 服务: nginx.service 状态: 运行中 === 日志查询 === 日志文件: /var/log/messages 行数: 5
风哥针对Web API开发建议:

  • 使用RESTful风格设计API
  • 添加认证和授权机制
  • 实现错误处理和返回码
  • 添加API文档说明
  • 配置HTTPS加密传输

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息