API接口(2)

📅 2026 年 06 月 13 日 👤 jyjswk 📁 编程 / 网络 💬 暂无评论

应用层协议

半双工

在C/S架构中典型代表是http,这种一问一答会出现逻辑阻塞,早期常使用轮询来处理有实时响应的任务场景

全双工

主流的长连接方式使用websocket,类似的还有MQTT等协议,解决了轮询在处理实时响应任务时出现的通信延迟问题

API类型

不同风格API的适用场景不同(由请求的数据决定),没有协议的规定严格,与后端服务返回的数据格式(XML、JSON)配合使用,但核心功能还是:基于某种应用层协议的请求报文解析与响应报文封装

RESTful API

最常见的Web API类型,基于 HTTP/HTTPS 协议,配合JSON数据格式轻量、简单且高度可扩展。

GraphQL API

用于针对数据库中特定数据结构的精确查找,效率高。

gRPC API

常用于微服务架构中的系统间快速通信。

后端异步处理架构

与传统的请求驱动模型不同,让后端不同服务之间解耦合,系统扩展性更好。

事件/消息驱动

本质没有太大差别:
事件驱动使用状态机模型,事件处理完成返回一条状态,开始执行下一个任务;
消息驱动使用订阅模型,事件处理每一步通过消息来管理是否进入下一个服务,过程更细化。

import threading
import time

# 事件生成器
class EventGenerator(threading.Thread):
    def __init__(self, event_total):
        super(EventGenerator, self).__init__()
        self.event_total = event_total

    def run(self):
        for i in range(self.event_total):
            event = {'type': 'event', 'timestamp': time.time(), 'data': i}
            event_bus.put(event)
            time.sleep(1)

# 事件处理器
class EventHandler(threading.Thread):
    def __init__(self, event_total):
        super(EventHandler, self).__init__()
        self.event_total = event_total

    def run(self):
        for i in range(self.event_total):
            event = event_bus.get()
            print(f'处理事件:{event}')
            time.sleep(1)

# 事件总线
from queue import Queue
event_bus = Queue()

# 启动事件生成器和事件处理器
event_generator = EventGenerator(10)
event_handler = EventHandler(10)

event_generator.start()
event_handler.start()

# 等待事件处理完成
event_generator.join()
event_handler.join()
任务队列

异步处理、存储、调度任务的全生命周期

import threading
import time

# 生产者
class Producer(threading.Thread):
    def __init__(self, message_total):
        super(Producer, self).__init__()
        self.message_total = message_total

    def run(self):
        for i in range(self.message_total):
            message = {'type': 'message', 'timestamp': time.time(), 'data': i}
            message_queue.put(message)
            time.sleep(1)

# 消费者
class Consumer(threading.Thread):
    def __init__(self, message_total):
        super(Consumer, self).__init__()
        self.message_total = message_total

    def run(self):
        for i in range(self.message_total):
            message = message_queue.get()
            print(f'处理消息:{message}')
            time.sleep(1)

# 消息队列
from queue import Queue
message_queue = Queue()

# 启动生产者和消费者
producer = Producer(10)
consumer = Consumer(10)

producer.start()
consumer.start()

# 等待消费者处理完成
producer.join()
consumer.join()

💬 评论区

✍️ 发表你的看法

-->