当前位置: 首页 > 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()

在这里插入图片描述

幼儿园版

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

相关文章:

  • 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 文档 高画质提取图片、视频、音频素材助手
  • 视觉周刊|走进变革中的博物馆
  • LPR名副其实吗?如果有所偏离又该如何调整?
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 光明日报社副总编辑薄洁萍调任求是杂志社副总编辑
  • 高飞已任南航集团党组副书记
  • 美官方将使用华为芯片视作违反美出口管制行为,外交部回应