当前位置: 首页 > news >正文

接口——类比摄像

最近迷上了买相机,大疆Pocket、Insta Go3、大疆Mini3、佳能50D、vivo徕卡人像大师(狗头),在买配件的时候,发现1/4螺口简直是神中之神,这个万能接口让我想到计算机设计中的接口,遂有此篇——

接口的代码格式因编程语言而异,下面提供两个经典接口的示例,分别是 REST API 和 gRPC,并对比它们的区别。

  1. REST API 示例(Python Flask)
    REST API 使用 HTTP 协议,通过不同的 HTTP 方法(GET、POST、PUT、DELETE)操作资源,返回 JSON 或 XML 格式的数据。
from flask import Flask, jsonify, requestapp = Flask(__name__)# 模拟数据
books = [{"id": 1, "title": "Python Crash Course", "author": "Eric Matthes"},{"id": 2, "title": "Clean Code", "author": "Robert C. Martin"}
]# 获取所有书籍
@app.route('/api/books', methods=['GET'])
def get_books():return jsonify(books)# 获取单个书籍
@app.route('/api/books/<int:book_id>', methods=['GET'])
def get_book(book_id):book = next((b for b in books if b['id'] == book_id), None)if book is None:return jsonify({"error": "Book not found"}), 404return jsonify(book)# 添加书籍
@app.route('/api/books', methods=['POST'])
def add_book():data = request.get_json()new_book = {"id": len(books) + 1,"title": data.get('title'),"author": data.get('author')}books.append(new_book)return jsonify(new_book), 201if __name__ == '__main__':app.run(debug=True)
  1. gRPC 示例(Python + Protocol Buffers)
    gRPC 使用 Protocol Buffers 定义服务和消息格式,通过 HTTP/2 进行通信,提供强类型接口和高性能。
    首先定义 .proto 文件(book.proto):
syntax = "proto3";package book;// 定义消息格式
message Book {int32 id = 1;string title = 2;string author = 3;
}message BookRequest {int32 id = 1;
}message BookList {repeated Book books = 1;
}// 定义服务接口
service BookService {// 获取所有书籍rpc GetBooks(google.protobuf.Empty) returns (BookList);// 获取单个书籍rpc GetBook(BookRequest) returns (Book);// 添加书籍rpc AddBook(Book) returns (Book);
}

然后实现服务端(server.py):

import grpc
from concurrent import futures
import book_pb2
import book_pb2_grpcclass BookService(book_pb2_grpc.BookServiceServicer):def __init__(self):self.books = [book_pb2.Book(id=1, title="Python Crash Course", author="Eric Matthes"),book_pb2.Book(id=2, title="Clean Code", author="Robert C. Martin")]def GetBooks(self, request, context):return book_pb2.BookList(books=self.books)def GetBook(self, request, context):for book in self.books:if book.id == request.id:return bookcontext.set_code(grpc.StatusCode.NOT_FOUND)return book_pb2.Book()def AddBook(self, request, context):new_book = book_pb2.Book(id=len(self.books) + 1,title=request.title,author=request.author)self.books.append(new_book)return new_bookdef serve():server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))book_pb2_grpc.add_BookServiceServicer_to_server(BookService(), server)server.add_insecure_port('[::]:50051')server.start()print("Server started, listening on port 50051")server.wait_for_termination()if __name__ == '__main__':serve()

在这里插入图片描述

幼儿园版

在这里插入图片描述
嘿嘿
在这里插入图片描述

http://www.dtcms.com/a/197678.html

相关文章:

  • 31、魔法生物图鉴——React 19 Web Workers
  • Jmeter使用及压测
  • Bash fork 炸弹 —— :(){ :|: };:
  • Android studio Could not move temporary workspace
  • 扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松
  • 10.11 LangGraph多角色Agent开发实战:生产级AI系统架构与性能优化全解析
  • CVE-2018-1273 漏洞深度分析
  • 数据库DDL
  • ubuntu18.04通过cuda_11.3_xxx.run安装失败,电脑黑屏解决办法
  • Zookeeper 入门(二)
  • 数据库约束-SQL创建表
  • 数据库blog2_数据结构与效率
  • Flink 的窗口机制
  • 数据结构 -- 树形查找(三)红黑树
  • 【数据结构】2-3-1单链表的定义
  • 索引与数据结构、并行算法
  • 【Linux】进程的基本概念
  • 云原生安全:IaaS安全全解析(从基础到实践)
  • C++ 之 继承
  • 批量处理 Office 文档 高画质提取图片、视频、音频素材助手
  • 鸿蒙系统电脑:开启智能办公新时代
  • 【HarmonyOS 5开发入门】DevEco Studio安装配置完全指南
  • 中科院自动化研究所通用空中任务无人机!基于大模型的通用任务执行与自主飞行
  • AIDA64 extreme7.5 版本注册激活方法
  • uniapp的适配方式
  • APP手机端测试覆盖点
  • AI助力,短剧发展引来新的创新热潮
  • C++中的四种强制转换
  • 掌握版本控制从本地到分布式
  • 动态内存管理2+柔性数组