一、背景介绍 在平时工作中,我们会把通用的代码,合并到一个通用的SDK中,增加大家工作效率,本文主要分享我们在编写SDK时候的准入标准以及相关编码思想。 首先需要回答,为什么要编写SDK?
本文首先阐述了 RESTful 风格 API 的基础理论知识以及 Richardson 成熟度模型,随后讨论了好的 API 应该具有哪些特征,最后对流行的 API 实现方式,即 GraphQL 和 RESTful,进行了对比。 现在,每个人都在关注 API。API 最早开始流行于大约 20 年前,2000 年,Roy Fielding 在他的博士论文中首次提出了 REST 这个术语。同年,Amazon、Salesforce 和 eBay 向全世界的开发者介绍了他们的 API,永远改变了我们构建软件的方式。 在 REST 之前,Roy Fielding 论文中的原则被称为“HTTP 对象模型”,随后你会明白这为何非常重要。 随着阅读的深入,你还会看到如何确定你的 API 是否成熟,好 API 的主要品质是什么以及为何在构建 API 的时候,要注重适应性。 1 RESTful 架构基础 REST 代表表述性状态转移(Representational State Transfer),由 Roy Fielding 在他的博士论文中定义,长期以来,它就是服务 API 的圣杯。它并不是构建 API 的唯一方式,但是由于它的流行,即便是非开发人员也知道这种标准。 RESTful 软件有如下六种特点: 客户端 - 服务器端架构 无状态 可缓存 分层系统 按需编码(可选) 统一接口 但是,对日常使用来说,这过于理论化了。我们需要更具操作性的东西,这也就是 API 成熟度模型。 2 Richardson 成熟度模型 该模型是由 Leonard Richardson 提出的,它将 RESTful 开发原则结合成四个简单易行的步骤。在模型中的位置越高,就越接近 Roy Fielding 所定义的 RESTful 原始理念。 Level 0:POX(Plain Old XML)的泥沼 Level 0 的 API 是一组简单 XML 或 JSON 的描述。在前文中,我曾经说过在 Fielding 的论文之前,RESTful 原则被称为“HTTP 对象模型”。 这是因为 HTTP 是 RESTful 开发中最重要的组成部分。REST 要尽可能多地使用 HTTP 固有属性中的理念。 在 Level 0,没有使用任何这样的东西。我们只是构建自己的协议并把它作为一个专有层。这种架构被称为远程过程调用(Remote Procedure Call,RPC),适用于远程过程 / 命令。 通常我们会有一个端点,可以对它进行调用以获取一堆 XML。在这方面,一个典型的例子就是 SOAP 协议:另外一个很好的例子就是 Slack API。它有些多样化,有多个端点,但依然是 RPC 风格的 API。它暴露了 Slack 的各种功能,中间没有附加任何特性。如下的代码展示了如何向一个特定的通道发送消息: 虽然按照 Richardson 的模型,这是一个 Level 0 的 API,但是这并不意味着它是不好的。只要它是可用的,并且恰当地服务于业务需求,那它就是很棒的 API。 Level 1:资源 为了构建 Level 1 的 API,我们需要找出系统中的名词并将它们通过不同的 URL 暴露出来,如下面的样例所示:其中,“/api/books”能让我访问一个通用的图书目录,“/api/profile”能够让我访问这些书的作者的基本信息。为了获取某个资源的第一个特定实例,我可以在 URL 中添加 ID(或其他引用)。 在 URL 中还可以嵌套资源,这展示了它们是以层级结构的形式组织的。 回到 Slack 的样例,如下展示了按照 Level 1 API,它们会是什么样子的:现在,URL 发生了变化,从原先的“/api/chat.postMessage”变成了现在的“/api/channels/general/messages”。 信息中“channel”部分从请求体转移到了 URL 中。从字面就能看出,通过使用这个 URL,我们可以预期有条消息发布到了 general 通道上。 Level 2:HTTP 动作 Level 2 利用 HTTP 动作(verb)来添加更多的含义和意图。在这方面可用的动作比较多,我这里只用到一个基础的子集:PUT / DELETE / GET / POST。 借助这些动作,我们可以预期包含它们的 URL 有不同的行为: POST:创建新数据 PUT:更新现有的数据 DELETE:移除数据 GET:查找特定 id 的数据输出,获取某个资源(或整个集合) 以上面提到的“/api/books”为例:那这里的“安全”和“幂等”又是什么意思呢? “安全”的方法指的是永远不会改变数据的方法。REST 建议 GET 方法只能用来获取数据,所以在上面的集合中,它是
,这次则从如何撰写一个好的PRD角度来帮助产品经理完成专业能力提升。 PRD撰写,是产品经理的一项重要工作,也是专业能力的核心体现。 首先,我们来看看PRD经常出现的问题。
4.正式烧录 烧录教程:https://nodemcu.readthedocs.io/en/master/flash/ 此处我们选择esptool.py作为烧录工具。
缩写 。比如:WTF,RTFSC …… (使用拼音缩写也同样给力,比如:BT,TMD,TJJTDS) 随机大写字母 。比如:gEtnuMbER.. 重用命名 。
还是自己动手,丰衣足食,今天来分享一下如何 Python 写一个 OCR 识别程序。授人以渔,本文的思路适用于编写任意一个日常小工具。
可以将日志与数据磁盘分离,使用不同的磁盘来存储数据,分散数据写入的压力. 2 数据写入是这里面的重要的问题,而写入数据时与数据库系统的一些性能优化参数有关,后面我们详细来说 3 WAL LOG 日志的写入和数据写入是对应的
随着人工智能技术的不断发展,越来越多的人开始尝试使用ChatGPT这一智能对话系统。但是,由于各种原因,有些人可能会遇到一些困难,不知道如何使用ChatGPT。本文将为大家介绍几个镜像网站,帮助大家解决使用ChatGPT时的烦恼。 一、ChatGPT镜像网站是什么? 镜像网站是指将原网站的内容和结构复制或映射到其他服务器上,以实现在不同地区的访问。ChatGPT镜像网站则是将ChatGPT的接口复制到其他服务器上,用户可以通过这些镜像网站使用ChatGPT,无需担心访问速度慢或无法访问等问题。 二、为什么需要使用ChatGPT镜像网站? 访问速度更快:由于ChatGPT镜像网站的内容和结构已经复制到其他服务器上,因此访问速度通常比原网站更快。无需翻墙:使用ChatGPT镜像网站可以避免翻墙,因此可以更好地保护个人隐私。更稳定:由于ChatGPT镜像网站有多个备份服务器,因此即使其中一个服务器出现问题,用户仍然可以通过其他服务器访问ChatGPT。三、如何使用ChatGPT镜像网站? 选择一个可靠的ChatGPT镜像网站。可以通过搜索引擎或朋友推荐来选择一个可靠的镜像网站。注册账号。在ChatGPT镜像网站上注册一个账号,以便能够使用ChatGPT。登录。使用注册的账号登录到ChatGPT镜像网站。开始使用。在ChatGPT镜像网站上,可以输入想要询问的问题,或者与其他用户进行对话。四、常见的ChatGPT镜像网站推荐: 知识通AI:https://amgpt4.github.ioChatGPT中文:https://ai.itigpt.com 总之,使用ChatGPT镜像网站可以让我们更加方便地使用ChatGPT这一智能对话系统。只需要选择一个可靠的镜像网站,按照步骤操作,就可以轻松地使用ChatGPT。如果你也遇到了访问速度慢或无法访问等问题,不妨试试这些镜像网站,或许能解决你的烦恼。
E-Job : 重写Quartz基于数据库的分布式功能,改用Zookeeper实现注册中心 作业注册中心:基于Zookeeper和其客户端Curator实现的全局作业注册控制中心。
出品 | OSC开源社区(ID:oschina2013) GNU Coreutils 在 Linux 系统和其他平台上提供了一些常见且重要的命令行工具,GNU Core Utilities 包括常用的命令,如 cat、ls、rm、chmod、mkdir、wc、whoami 和许多其他命令。 随着行业内广泛将安全敏感代码转换为像 Rust 这样的内存安全语言,Sylvestre Ledru 和其他开发人员一直在开发基于 Rust 的 Coreutils 替代品 —— Rust Coreutils:完全清除 C 语言代码,转而使用 Rust 这种主打内存安全性和安全性的现代编程语言。近一年来 Rust Coreutils 取得一些进展,已经能够在基本的 Debian 系统上运行,而最近他们一直在提高 GNU Coreutils 的兼容性。据外媒 phoronix 介绍,Rust Coreutils 不仅更安全,对于一些二进制文件,现在看到的性能比 GNU 包中的命令(如 head、cut 和其他常见命令)“显着地”要好。 不过现在 Rust Coreutils 仍然面临着缩小与上游 GNU 命令兼容性的挑战。目前唯一尚待实现的二进制文件之一是 stty,除了优化和兼容性工作之外,开发人员还在努力让 Debian 和 Ubuntu 在默认情况下能轻松切换到 Rust Coreutils。 通过 Sylvestre Ledru 的博客可以了解有关 Rust Coreutils 当前状态的更多详细信息。该项目的源代码可在 GitHub 中查看。