有电书房店铺主页二维码
有电书房
微信扫描二维码,访问我们的微信店铺

RESTful Web API模式和实践经典实例

108.29 限时折扣 原价:¥115.20
运费: ¥ 5.00-22.00
库存: 300 件
RESTful Web API模式和实践经典实例 商品图0
RESTful Web API模式和实践经典实例 商品图1
RESTful Web API模式和实践经典实例 商品图2
RESTful Web API模式和实践经典实例 商品缩略图0 RESTful Web API模式和实践经典实例 商品缩略图1 RESTful Web API模式和实践经典实例 商品缩略图2

商品详情

书名:RESTful Web API模式和实践经典实例
书号:978-7-5239-0532-6
定价:128元
作者:[美]迈克·阿蒙森(Mike Amundsen) 著 李辉 译
出版时间:2026-04-24
出版社:中国电力出版社
页码: 500    字数(千字):491
开本:特16开    版次:1    印次:1


品牌介绍

中国电力出版社成立于 1951 年,作为中国成立最早的中央科技出版社之一,曾隶属于水利电力部、能源部、电力工业部、国家电力公司,现为国家电网公司所属的科技出版社,在电气技术专业出版领域享有极高的声誉。该社作为以图书出版为主体,音像、电子出版物、期刊、网络出版共同发展的大型出版企业,以强大的出版资源和高素质的专业队伍,致力于向读者提供包括电力工程、电气工程、建筑工程、电子技术、信息技术、外语、大中专教材、家教等学科门类齐全的权威出版物,也竭力为广大师生提供精品教材,是教育部和北京市教委规划教材的出版基地之一。


编辑推荐

编辑推荐 如今,许多组织编排并维护着依赖外部服务运行的应用程序。在这些公司中,软件设计师、开发人员和架构师通常致力于协调和维护基于现有服务API的应用程序,其中包括了运行在其生态系统之外的第三方服务。本书提供了经过验证的配方,帮助你让这些众多不同的部分在你的网络中协同工作。 本书作者提供了行之有效的分步方案,指导了如何发现、连接并维护由他人设计和构建的应用。无论是在开发面向用户的移动应用,还是在构建高性能的机器对机器的解决方案,本指南都将向你展示整合各个API的规则、流程、命令和协议,这些是将它们安全、可扩展且可靠地协同工作的黏合剂。 专家推荐 “Amundsen提供了一本极具价值的资源,用简明易懂的方式探讨了常见且复杂的 API 设计选择。他引导读者充分挖掘HTTP协议与超媒体的力量。任何想要设计出经得起时间考验、可持续演化的Web API的人,都应该阅读此书。” ——James Higginbotham 《Web API Design》作者, LaunchAny 执行级API顾问


产品特色

微服务与分布式数据的连接及编排。


作者介绍

Mike Amundsen是国际知名的作家与演讲者,长期活跃于网络架构、Web开发及技术与社会交叉领域的研究与咨询工作。


内容介绍

本书的主要内容有:设计与构建可在开放网络上成功交互的服务接口。通过共享语义来提高API的互操作性。构建可适应服务演进而不致崩溃的客户端应用。创建支持点对点交互的弹性且可靠的API。使用基于Web的API注册中心,实现运行时的“发现与绑定” 机制,从而实时管理外部依赖。实施稳定的工作流,确保复杂的多服务任务可以一致地执行。
本书适用于本书的目标读者是负责规划、设计与实现基于HTTP 的服务接口的专业人士。


前言

前言 欢迎阅读这本书。 这个书名听起来确实值得解释一番,而这也正是我们要探讨的。在此先告诉大家,我将稍稍打破常规,在本书的前言部分(即所有用罗马数字标记页码的部分)加入大量相关内容。具体内容留待下一节(即第一部分)再讲,这里先交代一些必要信息。 关于本书 本书旨在帮助软件设计师、架构师、开发者及运维人员构建能充分发挥万维网优势的服务接口(API)。同时,本书也致力于降低构建上层服务时的成本与风险,这类服务通常具有高可靠性要求,且依赖于其他只能通过网络访问的API 和服务。 为此,我收集了70 余种技巧与模式。这些都是过去数十年间,我在帮助客户于开放万维网环境中设计、构建并成功部署业务服务的过程中,所积累并实际运用过的经验。我想,你可能对书中的某些技巧已有所耳闻,只是它们或许以其他名称或形式呈现。同时,我也希望你能从中发现解决类似问题的新方法。 我从多年实践中认识到,软件设计的核心挑战几乎从未改变。然而,应对这些挑战的具体方案却随着技术的日新月异与行业风尚的流转而频繁更迭。本书将聚焦于挑战本身,至于如何选用最新技术与流行方案,则交由读者自行定夺。 本书名为“经典实例”,换句话说,书中并不会有太多可直接运行的代码。不过,书中会有大量图表、代码片段、网络报文示例以及问题剖析,而我们探讨的挑战将始终保持技术无关性与平台无关性。本书呈现的技巧,旨在方便读者将其转化为目标环境中的代码与组件。 本书目标读者 本书的目标读者是负责规划、设计与实现基于HTTP 的服务接口的专业人士。对其中一部分读者而言,这意味着专注于创建企业级的服务生产者与消费者;对另一些读者而言,则可能是构建能在万维网上运行、以可扩展且可靠的方式服务全球用户的软件。但无论如何,目标都是一致的:创建易用的应用程序编程接口(API),助力软件工程师攻克当前的难题。 无论是在本地托管解决方案,还是构建运行于云端的软件,本书的技巧都将帮助你深入理解所面临的挑战,并提供一套实用的方法,用以预见潜在问题、内置恢复机制,从而从容应对各种意外状况。 本书内容概览 为方便读者阅读,本书内容划分为若干章节,每章聚焦于一个相关主题。第一部分由第1 章和第2 章组成,旨在探讨万维网共享服务的背景与基础。若要延伸“技巧”这一比喻,不妨将第一部分视为我们即将在第二部分品味的“超媒体技巧”背后的故事。如同任何一本优秀的指南,第二部分的各主要章节均包含一系列自成体系的技巧,供你在设计、构建与部署万维网API 时应对各类特定挑战。 各章节及其内容简述如下: 第一部分:理解RESTful 超媒体 开篇的两章(第1 章与第2 章)阐述了支撑本书所有技巧的理论根基。其内容汇集了历史、设计哲学与实用主义思想。这些内容是我多年在设计、构建和支持Web 网络应用时所学到的思想、原则与经验。 第1 章,RESTful Web API 介绍 本章概述了本书甄选技巧背后的基本原理。内容涵盖:解答“RESTful Web API(RWA)是什么”这一核心问题;阐释超媒体为何在RWA 创建中发挥着关键作用;指导本书技巧筛选与解读的一些基础性共通原则。本章为后续内容做好了铺垫。 第2 章,用超媒体思维进行思考与设计 本章探讨了构成Web 应用基础的、由超媒体驱动的分布式系统的背景。本章同样融合历史回顾、设计哲学与实用主义思想,探讨了第二部分涵盖的各个技巧集合(涉及设计、客户端、服务、数据与工作流)。阅读本章有助于你理解后续所有模式与实践背后的关键设计理念及技术基础。 第二部分:超媒体技巧手册 第二部分收录了我为本书精心筛选的所有技巧。你可能会注意到,第二部分大多数章节的标题均以“超媒体”一词开头。这足以让你体会到我们贯穿全书的核心方法。 第3 章,超媒体设计 可靠且富有弹性的服务始于深思熟虑的设计。本章介绍了在编码和发布服务之前需要面临的一系列常见挑战。本章内容对架构师及服务设计人员非常有帮助,并为后续各种技巧奠定了基础。 第4 章,超媒体客户端 本章聚焦于创建服务/API 消费者应用程序时将面临的挑战。在讨论服务接口本身的技巧之前,我有意先讨论了客户端应用。对于任何想要创建稳定可靠,既能存活于Web 又能用于企业内部的开放服务平台的项目而言,采用通用的方法来创建灵活且有弹性的服务消费者是必不可少的。 第5 章,超媒体服务 有了坚实的设计原则基础和架构合理的客户端应用程序,就能更容易地构建和发布稳定的服务生产者,并且能够在不破坏现有API 消费者的情况下随时间安全地更新。这组技巧不仅关注可靠服务接口设计的原则,也强调支持运行时错误恢复和可靠性模式的重要性,以确保即使系统的部分组件出现故障,你的解决方案也能正常运行。 第6 章,分布式数据 本章聚焦于在线分布式环境中支持持久化数据所面临的挑战。本章的大多数技巧旨在通过确保数据完整性来提升数据服务的响应性、可扩展性和可靠性,即便在运行时更改内部数据模型和实现方式时亦能如此。 第7 章,超媒体工作流 最后一组技巧聚焦于在Web 上创建和管理服务工作流。开放服务工作流的关键挑战在于:如何创建一套安全可靠的解决方案,将多个互不相关的服务整合到一个统一且富有弹性的工作流中,以解决单个服务均无法独立应对的复杂问题。因为本章依赖于本书前述章节介绍的许多技巧,因此我将此章放到了最后。 第8 章,结束语 最后一章是对全书内容的简短总结,同时也包含了一些展望与号召,旨在帮助你在着手将这些技巧应用于自身环境时,做好准备。 附录 本书包含多个附录,这些附录可作为额外的补充辅助材料。在正文中你会时不时地看到这些附录引用,不过它们也可以作为独立的参考资料来查阅。 附录A,RESTful Web API 指导原则 本附录以“励志海报”的形式,精炼地呈现了本书所选技巧背后的核心指导原则,并阐述了一些用于明确模式描述、并用于指导其通用实现的次要原则。 附录B,补充阅读 在全书中,我在很多地方都会推荐扩展的阅读材料,引用书籍和文章,以及演示文稿和视频,这些内容都是书中许多建议的来源。本附录包含一份独立的阅读和观看材料清单,可在实践技巧时将其做参考和指南。 附录C,相关标准 本书的目标是创建能成功“在网络上运行”的服务,因此书中技巧依赖于一系列重要的开放网络标准。本附录包含了相关标准文档的列表。 附录D,使用HyperCLI 在本书的许多地方,我都提到了一个名为HyperCLI 的命令行界面工具。你可以使用该工具与具备超媒体感知能力的服务进行交互。本附录对该工具进行了简单的介绍,并提供了一些其他的关于如何使用HyperCLI 和HyperLang 的在线资源。 本书未涵盖内容 作为一本指南,本书并不适合用来教读者如何具体实现书中列出的模式和思想。如果你对本书所基于的任何支柱性概念不熟悉,你可能需要参考其他资源来获取帮助。 以下是我在培训和咨询工作中使用到的一些书籍,可以从中获取在本书中没有详细介绍的主题的相关信息: HTTP 协议 本书中的大部分技巧都是为HTTP 协议实现而开发的。如果想了解更多有关HTTP 的强大之处与挑战,推荐Chris Shiflett 编写的《HTTP Developer’s Handbook》(Sams)。Shiflett 的著作对我学习HTTP 协议的内部细节提供了极大的帮助。虽然该书在2003 年出版,但至今仍是我强烈推荐的书。 API 设计 关于分布式服务API 设计的细节,我建议读者参阅我的《Building Hypermedia APIs with HTML5 and Node》(O’Reilly)。如果你正在寻找一本专注于API编码的书籍,可以参阅我最近出版的《Design and Build Great Web APIs》(Pragmatic Bookshelf),这本书提供了一份详尽的、涵盖完整API 生命周期的实战指南。 API 客户端 编写API/ 服务客户端本身就是一门技术活。如果你想深入了解创建灵活的由超媒体驱动的客户端应用程序的过程,可以参阅我的《RESTful Web Clients》(O’Reilly)一书。 Web API 关于创建Web API 本身的细节,我推荐阅读我和Leonard Richardson 合著的《RESTful Web API》(O’Reilly),以及我的另一本书《Design and Build Great Web APIs》(O’Reilly)。我在手边常备的数据还包括James Higginbotham 的《Principles of Web API Design》(Addison-Wesley)和Arnaud Lauret 的《The Design of Web APIs》(Manning)。 数据 如果你想了解更多大规模数据处理的内容,推荐Piethein Strengholt 所著的《Data Management at Scale》(O’Reilly)以及Evren Eryurek 等合著的《Data Governance:The Definitive Guide》(O’Reilly 出版社)。 工作流 如果你在寻找工作流工程化的入门书籍,推荐查看Bernd Ruecker 的《Practical Process Automation》(O’Reilly)和Malinda Kapuruge 等合著的《Service Orchestration as Organization》(O’Reilly)。 关于设计和构建微服务,还可以在附录B 中找到具有真知灼见的资源列表。 关于这些技巧 虽然本书的技巧是以主题(设计、客户端、服务、数据和工作流)为单位进行组织的,但每个技巧都遵循以下通用结构: 问题 简要描述在设计和构建服务时可能遇到的问题。 解决方案 介绍用于解决相应问题的一个或多个建议方案。 示例 某些情况下,技巧中也会包含示例,可能是HTTP 报文(请求/ 响应),也可能是一小段用于展示相应内部工作流的伪代码。 讨论 技巧还会包含详尽的讨论部分,涵盖权衡以及优缺点。因为现实中的挑战很少只存在一种解决方案,因此此内容通常是技巧中最重要的部分,旨在帮助你理解每种解决方案的适用场景。 相关技巧 在技巧章节的结尾还会有一个“另请参阅”小节,其中列出了一个或者多个相关的技巧,这些技巧依赖于其他技巧,或者为其他技巧的实现提供支持。你将在此了解这些技巧在实际运行系统中是如何相互作用、彼此关联的。 如何使用本书 强烈建议大家从头到尾读完本书,以充分领会书中的概念和技巧。不过,也理解大家可能时间有限,且有可能并不需要完全沉浸式的阅读全书也可以从书中获益。正因如此,你可以根据你的关注点、目标以及想投入的时间,选择不同的阅读方式。 时间紧张 如果你最近刚购买本书,且有一个需要解决的迫切的问题,只需查看目录,找到一个看起来符合需求的技巧,然后直接阅读相应章节。正如所有好的技巧一样,每个技巧都是完整的。其中可能会引用书中的其他技巧(尤其是查看“另请参阅”小节),你可以根据需要决定是否继续阅读。 快速了解“全局” 如果你想快速了解全貌,我建议你阅读第1 章、第2 章以及第8 章内容。第一部分将为你介绍本书的“基调”、技巧的历史背景及其背后的技术理念。然后再决定是专注于第二部分的某个特定主题,还是随心浏览技巧集。 重点团队的主题参考 如果你所在的团队负责专注于本书涵盖的一个或多个主题(如设计、客户端、服务、数据、工作流等),我建议首先了解全局(第一部分),然后深入研究第二部分中与你当前主题相关的章节。之后,你可以在推进实现工作时,将这些章节用作重点参考。 架构师的深度探索 如果你的主要任务是构建可公开访问的服务生产者和消费者,那么通读全书会对你很有帮助。本书中的许多技巧可用于实现一系列企业级认可的组件,这些组件可以安全地组合在一起,为定制化服务构建富有弹性且可靠的基础。通过这种方式,本书可以作为企业内部可共享库的一系列实践建议。 管理企业级项目的清单 对于负责领导企业级或其他大规模项目的读者,我建议先了解全局,然后将每个主题章节作为指南,为创建和发布RESTful Web API 构建自己的内部管理清单。 最后,本书既可作为一本实用的参考书,也可作为一本系统性的叙述指南。你可以随意使用对你有帮助的部分,略过那些似乎不太适用当下情景的章节。在未来的某个时刻遇到新的挑战时,你可能会发现回来并(重新)阅读某些章节会受益匪浅。 排版约定 本书使用以下排版约定: 斜体(Italic) 表示新的术语、URL、电子邮件地址、文件名和文件扩展名。 等宽字体(Constant width) 用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句和关键字。 等宽粗体(Constant width bold) 表示应由用户直接输入的命令或其他文本。 等宽斜体(Constant width italic) 表示应由用户提供的值或根据上下文确定的值替换的文本。 示例代码 可以从http:// 下载补充材料(示例代码、练习等)。 如果你在使用示例代码时遇到技术问题或困难, 请发送电子邮件至bookquestions@oreilly.com。 编写本书旨在帮助你完成工作。通常,对于本书提供的示例代码,你可以在自己的程序和文档中使用。不需要联系O’Reilly 获得许可,除非需要大段地复制代码。例如,使用本书的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly 示例代码则需要获得许可。引用本书内容并使用示例代码来回答问题也不需要许可,但将本书的很大一部分示例代码复制到自己的产品文档中则需要获得许可。 我们感谢署名,但不做强制要求。署名信息通常包括书名、作者、出版社及ISBN。例如:“RESTful Web API Patterns and Practices Cookbook by Mike Amundsen (O’Reilly). Copyright 2023 Amundsen.com, Inc., 978-1-098-10674-4”。 如果你认为自己对示例代码的使用已超出合理使用范围或上述许可,请随时通过permissions@oreilly.com 与我们联系。 O’Reilly 在线学习平台(O’Reilly Online Learning) 近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。 公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:/。 联系我们 任何有关本书的意见或疑问,请按照以下地址联系出版社。 美国: O’Reilly Media, Inc. 1005 Gravenstein Highway North Sebastopol, CA 95472 中国: 北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035) 奥莱利技术咨询(北京)有限公司 本书的配套网站https://oreil.ly/restful-web-api 上列出了勘误表、示例代码和其他信息。 发送邮件至bookquestions@oreilly.com 可对本书进行评论或提出技术问题。 关于书籍和课程的新闻和信息,请访问我们的网站https://oreilly.com。 我们的LinkedIn:。 我们的Twitter:。 我们的Youtube:。 致谢 凡成大事者,必感念他人之助。智者与自信者常怀感恩之心以表此情。 —— Alfred North Whitehead 有太多的人教导我、启发我、给我建议、予我鼓励,这份名单我甚至不知如何从哪里开始列。不过在本书的写作过程中,有几个人给我提供了特别的帮助,我想在此向他们表示感谢。 正如我们所有人一样,我也是站在巨人的肩膀上。多年来,许多人曾启发我,我有幸结识过其中的一些人,并向他们学习。这些人的思想和建议塑造了本书的内容,包括:Subbu Allamaraju、Belinda Barnet、Tim Berners-Lee、Mel Conway、Roy Fielding、James Gleick、Ted Nelson、Mark Nottingham、Holger Reinhardt、Leonard Richardson、Ian Robinson 和Jim Webber。 我特别要感谢Lorinda Brandon、Alianna Inzana、Ronnie Mitra、Sam Newman、Irakli Nadareishvili、Vicki Reyzelman 和Erik Wilde,感谢他们帮忙阅读了部分书稿,并提供了非常宝贵的笔记和反馈。 我还需要感谢O’Reilly 公司的所有员工,感谢他们一直以来对我的支持以及在这个项目中提供的睿智的建议。我特别要感谢Mike Loukides 和Melissa Duffield,在我确定这个项目的范围和形式之前,他们就已对此项目充满信心。 我还要感谢Angela Rufino 在整个过程中的每一步都给予我支持。同时感谢Katherine Tozer、Sonia Saruba,以及许多其他在幕后辛勤付出、让本书得以面世的人们。特别感谢Kate Dullea 和Diogo Lucas 为本书绘制插图。 最后,向这些年来我遇到的所有人表示衷心的感谢:会议组织者和分会主席,以及接待我参加演讲和咨询的大小公司,课程学员,以及那些向我提问、让我窥视他们组织运作、帮助我探索、测试和完善本书中想法的社交媒体用户。你们在这里看到的一切,在很大程度上都归功于在我之前所有慷慨的人以及那些每天不知疲倦地构建利用附录A 中概念的系统的人。


目录

目录
序  1
前言  3
第一部分 理解RESTful 超媒体
第1 章 RESTful Web API 介绍  17
11 RESTful Web API 是什么 18
12 为何选择超媒体 24
13 Web 可扩展服务的共享原则 32
第2 章 用超媒体思维进行思考与设计  37
21 使用超媒体设计奠定基础 39
22 使用超媒体客户端提升弹性 44
23 使用超媒体服务提升稳定与可修改性 52
24 支持分布式数据 59
25 使用超媒体工作流提高可扩展性 65
第二部分 超媒体技巧手册
第3 章 超媒体设计  75
31 通过注册媒体类型实现互操作性 77
32 通过结构化媒体类型确保未来兼容性 79
33 通过发布词汇表实现领域特性的共享 82
34 通过语义配置文件描述问题空间 86
35 通过嵌入式超媒体在运行时表达操作 91
36 通过幂等操作设计一致的数据写入95
37 通过服务间状态转移实现互操作性98
38 设计可重复的操作 103
39 设计可撤销的操作 106
310 设计可扩展的消息  111
311 设计可修改的接口  115
第4 章 超媒体客户端  121
41 限制硬编码URL 的使用 123
42 让客户端具备HTTP 感知能力 128
43 通过以消息为中心的实现编写有弹性的客户端 131
44 编写能理解词汇表配置文件的有效客户端 134
45 在运行时协商配置文件支持 138
46 在运行时管理表述格式 141
47 使用模式文档作为消息元数据的来源 146
48 响应中的每个重要元素都需要标识符 151
49 依赖响应中的超媒体控件 155
410 为非超媒体服务支持链接和表单 159
411 在运行时验证数据属性 163
412 使用文档模式验证出站消息 166
413 使用文档查询验证入站消息 173
414 验证传入数据 176
415 维护自身状态 180
416 心怀目标 183
第5 章 超媒体服务  191
51 至少发布一个稳定的URL 193
52 防止内部模型泄漏 196
53 将内部模型转换为外部消息 200
54 将内部功能表达为外部操作 206
55 声明对客户端响应偏好的支持  211
56 支持HTTP 内容协商 217
57 为机器客户端发布完整的词汇表 221
58 以标准格式支持共享词汇表 229
59 发布服务定义文档 235
510 发布API 元数据 239
511 支持服务健康监测 245
512 标准化错误报告 251
513 通过运行时服务注册表提升服务可发现性 255
514 通过客户端提供的标识符提高吞吐量 260
515 通过幂等创建提升可靠性265
516 为依赖服务提供运行时回退策略 269
517 使用语义代理访问不合规服务 275
第6 章 分布式数据  283
61 隐藏数据存储内部实现 285
62 让所有变更具备幂等性 290
63 对外部操作隐藏内部数据关系 296
64 利用HTTP URL 支持“包含”和“与”查询 300
65 返回查询响应的元数据 304
66 以数据为中心的查询:是返回HTTP 200 还是HTTP 400 310
67 使用媒体类型进行数据查询 316
68 忽略未知数据字段 322
69 通过缓存指令提升性能 327
610 在生产环境中修改数据模型 334
611 扩展远程数据存储 341
612 限制过大的响应 346
613 使用透传代理进行数据交换 351
第7 章 超媒体工作流  361
71 设计符合工作流规范的服务 363
72 支持工作流的状态共享 368
73 以代码形式描述工作流 372
74 以DSL 描述工作流 376
75 以文档形式描述工作流 378
76 支持RESTful 作业控制语言 382
77 为工作流暴露进度资源 387
78 返回所有相关操作 391
79 返回最近使用的资源 396
710 支持有状态的在制品 401
711 启用标准列表导航 409
712 支持部分表单提交 414
713 使用状态监视实现客户端驱动的工作流 418
714 通过存储的重放优化查询428
715 对未完成工作使用202 Accepted 进行同步回复  435
716 通过自动重试进行短期修复 442
717 支持本地撤销或回滚 447
718 请求帮助 452
719 通过队列和集群扩展工作流 456
720 使用工作流代理整合非合规服务 459
第8 章 结束语  463
81 应用这些技巧 463
82 改造现有服务 466
83 其他资源467
84 后续步骤468
附录A RESTful Web API 指导原则  469
附录B 补充阅读  471
附录C 相关标准  475
附录D 使用HyperCLI  479


有电书房店铺主页二维码
有电书房
扫描二维码,访问我们的微信店铺

RESTful Web API模式和实践经典实例

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏