当前位置: 首页 > 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.xdnf.cn/news/510931.html

相关文章:

  • Java大厂求职面试:探讨Spring Boot与微服务架构
  • StarRocks Community Monthly Newsletter (Apr)
  • 你引入的lodash充分利用了吗?
  • Python 条件语句详解
  • SAP集团内部公司间交易自动开票
  • Python高级特性深度解析:从熟练到精通的跃迁之路
  • JAVA学习-练习试用Java实现“音频文件的读取与写入 :使用Java音频库处理音频数据”
  • 《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​
  • 主成分分析的应用之sklearn.decomposition模块的PCA函数
  • 初学c语言15(字符和字符串函数)
  • (5)python爬虫--BeautifulSoup(bs4)
  • 01 CentOS根分区满了扩容
  • 2025年- H30-Lc138- 141.环形链表(快慢指针,快2慢1)---java版
  • 学习是有方法的——费曼学习法
  • 先说爱的人为什么先离开
  • 轻量级视频剪辑方案:FFmpeg图形化工具体验
  • Linux的MySQL头文件和找不到头文件问题解决
  • Java API学习笔记
  • Spring AI Alibaba集成阿里云百炼大模型应用
  • SmartETL函数式组件的设计与应用
  • 【大模型面试每日一题】Day 22:若训练中发现Loss突然剧烈波动(Spike),可能有哪些原因?如何定位和修复?
  • nginx模块使用、过滤器模块以及handler模块
  • 自适应Prompt技术:让LLM精准理解用户意图的进阶策略
  • JMeter 教程:使用 HTTP 请求的参数列表发送 POST 请求(form 表单格式)
  • 贝塞尔曲线原理
  • Android studio Could not move temporary workspace
  • 使用AI 生成PPT 最佳实践方案对比
  • ChatGPT:OpenAI Codex—一款基于云的软件工程 AI 代理,赋能 ChatGPT,革新软件开发模式
  • window自带截图快捷键
  • C++学习:六个月从基础到就业——C++20:范围(Ranges)基础