常用数据库的 API - 开篇

图片

API

API 这个词在大多数人看来可能和 CNS 差不多,前者天天听说就是用不上,后者天天读就是发不了。

不过,通过今天的一个简短介绍,今后 API 这个东西你就用上了,因为在文章最后我将会展示一个最最基础且高频的 API 使用示例。

所谓 API(Application Programming Interface) 就是应用程序接口。这个应用程序可以类比于手机和电脑,这个接口就类似于数据线,如果我们想用数据线把东西在两个设备之前传输,就需要两者可以接受彼此的传输协议。如我们在电子商务中,经常就会用到的电商API即商品详情关键字搜索等封装了商品详情介绍,主图,商品价格,商品SKU数据等API数据接口,以获取商品信息。

对一个应用程序来说,如果你想快速的和它交换数据,也需要采用应用程序可以识别的规则。对于一些成熟的应用程序和网站来说,通常都会提供自己的一套API供开发者友好的使用,一方面可以大大扩展应用程序的生态环境,另一方面也可以避免暴力的爬虫。

我们通过下图的「印象笔记 API」为例,如果你使用过印象笔记(Evernote)的话,会发现大量第三方应用都可以支持绑定印象笔记账户进行各种创建笔记推送笔记等操作。这里不是印象笔记去适配第三方应用,而是它提供了一个完善的 API,可以供其他开发者来使用。

图片

REST API

API 之后还有一个概念是 REST API。 REST(Representational State Transfer) 的中文翻译一般是「表现层状态转化」(这也太抽象了吧),这个架构是 Roy Thomas Fielding 在2000年的毕业论文里提到的,他同时还是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。

关于究竟什么是「表现层状态转化」这里就跳过了,因为不跳过你也不会看(我也解释不清楚)。只需要了解,符合 REST 设计风格的 Web API 称为 RESTful API,有如下几个要点:

  • 资源地址:URI,比如:http://example.com/resources

  • 传输的资源:Web服务接受与返回的互联网媒体类型,比如JSON,XML,YAML等。

  • 对资源的操作:Web服务在该资源上所支持的一系列请求方法,比如:POST,GET,PUT 或 DELETE。

常用数据库 API

NCBI

NCBI 是啥就不介绍了,如果太多的功能没用过 PubMed 应该怎么也用过。在 NCBI 的开发文档中,有一个部分专门是讲 API 的。

NCBI 提供的 API 如下图所示,如果需要可以去看看。

图片

EMBL-EBI

EMBL-EBI 来自于欧洲,里面有很多很多数据库都是我们日常会使用的,只是你可以还不知道它们和 EBI 有关系的,例如存放了大量基因组及相关数据的 Ensembl ,包括大量蛋白序列和功能信息的数据库 UniPort,当然还有还有不逊色与 pubmed 的文献数据库 Europe PMC。

从个人的使用体验来说,一般能用EBI的时候我就尽量会绕过NCBI,因为整个一系列网站用起来都要更舒服些,文档查起来更顺手些,对一些有进阶需求的开发者会更友好些(如果你有二次开发的需求,经过对比不难理解我的感受)。

目前 EBI 比较知名的几个数据库都有很不错的 RESTful API 支持。

其中 Ensembl 支持 21 个 POST 和 98 个 GET 操作,可以在官方说明中查看;Uniport 数据库 和 Europe PMC 也有大量的操作支持。通过这些 API 你就可以接触到数据库中有的所有信息和 33 million 的文献。另外,EBI 还有一个 QuickGO 的网站也支持 RESTful API 。

他们的 API 完善到直接在 NAR 发了一篇文章。

图片

可用的数据库和工具如下

图片

使用 API

这里以 Ensembl 的一个基础 API 为例对使用方法进行简单的演示。如果我们在 Ensembl 的网站上查看一个基因,会是如下页面。在左侧我圈出来的是和这个基因相关的所有信息,其中99%的信息都可以通过 API 获取到。

图片

查看单基因信息

这里以最基础的单基因信息查询作为示例。Ensembl 的 RUSTful API 支持使用各种语言实现,既可以在 Unix 操作系统中使用 curl 和 wget 命令,也可以使用 python java perl 和 R 语言来操作。

如果要是用 wget 来查询一个基因的话,查询规则示例是http://rest.ensembl.org/lookup/id/AT4G34410?expand=1'。其实这就是一个简单的我们都能理解的「网址」,其中 id 后面是我们要查询的基因id,问号后面可以添加任意支持的参数。另外,还需要 header 信息'Content-type:application/json' 来指定获取的资源类型。

运行命令如下:

 

wget -q --header='Content-type:application/json' \
'http://rest.ensembl.org/lookup/id/AT4G34410?expand=1'  -O -

得到的内容会是一行 json 内容,这个信息大家看到都是崩溃的我就不直接放上来了。我们可以使用一些命令和操作稍微进行美化。

 

wget -q --header='Content-type:application/json' \
 'http://rest.ensembl.org/lookup/id/AT4G34410?expand=1'  -O - | jq '.' -

通过 jq 这个命令,可以让输出变成标准的 json 格式。输出截图如下:

图片

为了更方面的处理 json 内容和进行后一步的分析,我们可以移步到 R 中,看看如何使用。

要在 R 使用 RUSTful API 并进行后续的 json 文件处理,首先需要加载两个包,httr 用来调取 GET 和 POST 等命令,jsonlite 用来处理 json 格式的文件。

httr 会把 GET 的结果保存为一个 response 类型的对象,其中包括了 url,状态码以及header等各种各样的信息,jsonlite 可以帮助我们根据需求提取 json 里的内容并输出为 list 对象。

简单的运行命令如下:

 

# 加载 R 包
library(httr)
library(jsonlite)

# 指定 server
server <- "http://rest.ensembl.org"
# 指定查询内容,为了方便展示这里 expand=0
ext <- "/lookup/id/ENSG00000157764?expand=0"
# 使用 httr 包的 GET 进行查询
r <- GET(paste(server, ext, sep = ""), content_type("application/json"))
# 这里的 r 是一个response类型的对象。
# 将http错误转换为R错误方便debug
stop_for_status(r)

到这里其实查询的步骤已经完成,对象 r 的结构如下:

图片

接下来就是首先把这个对象中的内容转换为json然后在转换为table即可,命令非常简单。

 

list <- fromJSON(toJSON(content(r)))
tb <- do.call(rbind,list)

得到的table内容如下

图片

如果需要稍微优雅一些,可以改写为一个函数,如果需要一次查找多个基因,可以使用 POST 方法。

你可能会好奇使用 API 的优势在哪里。

如果只是查找一个基因,API 的优势并不明显,如果只是偶尔查找几个基因,API 的优势也不明显。

那怎么使用就有优势了呢,类比于「印象笔记」以及和它相关的使用了「印象笔记 API」的第三方应用,不知道会不会给你一些启发。

话不能说的太透,点到为止,更多的应用场景我们以后有机会再聊。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/78990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS3】

文章目录 1.简介2.边框3.圆角4.背景5.渐变CSS3 径向渐变6.文本效果7.字体8.2D转换9.3D转换10.过渡11.动画12.多列13.用户界面14.按钮 ​ 1.简介 模块 CSS3 被拆分为"模块"。旧规范已拆分成小块&#xff0c;还增加了新的。 一些最重要 CSS3 模块如下&#xff1a; 选…

时序数据库

时序数据库在许多应用领域中得到广泛应用,包括物联网(IoT)监控、应用性能监控(APM)、日志分析、金融数据分析、工业自动化和能源管理等。一些知名的开源和商业时序数据库包括InfluxDB、Prometheus、OpenTSDB、TimescaleDB和Kdb+等。 上图是一个典型的时序数据示意图,由…

慢查询SQL如何优化

一.什么是慢SQL? 慢SQL指的是Mysql中执行比较慢的SQL,排查慢SQL最常用的方法是通过慢查询日志来查找慢SQL。Mysql的慢查询日志是Mysql提供的一种日志记录&#xff0c;它用来记录Mysql中响应时间超过long_query_time值的sql,long_query_time的默认时间为10s. 二.查看慢SQL是否…

网络原理(一)网络基础,包括IP ,网络相关的定义

网络基础&#xff0c;包括IP &#xff0c;网络相关的定义 网络基础冲突域广播域DNSNATNAPT 网络基础 以下图片是书上的网图。 什么是IP地址&#xff1f; IP地址&#xff08;Internet Protocol Address&#xff09;是指互联网协议地址&#xff0c;又译为网际协议地址。P地址是…

PHP自己的框架2.0设置常量并绑定容器(重构篇三)

目录 1、设置常量并绑定容器 2、容器增加设置当前容器的实例和绑定一个类实例当容器 3、将常量绑定到容器中 4、运行效果 1、设置常量并绑定容器 2、容器增加设置当前容器的实例和绑定一个类实例当容器 //设置当前容器的实例public static function setInstance($instance){…

SW的stp文件转成CAD格式文件学习笔记

SW的stp文件转成CAD格式文件 文章目录 SW的stp文件转成CAD格式文件另存为part文件&#xff08;零件图&#xff09;另存为CAD文件 另存为part文件&#xff08;零件图&#xff09; 如图一个STP文件&#xff0c;右上角标注是什么文件呢 另存为零件图&#xff0c;即另存为part …

Python语言概述

​ 视频版教程 Python3零基础7天入门实战视频教程 Python作为一门非常流行的高级编程语言&#xff0c;自从22年开始&#xff0c;TIOBE编程语言排行榜Python一直排第一。 Python简洁高效&#xff0c;丰富的应用场景&#xff0c;受到广大程序员&#xff0c;科研工作者的喜爱。 …

基于图像形态学处理和边缘提取算法的路面裂痕检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 [Rr,Cc] size(Image1);% 获取 Image1 矩阵的大小&#xff08;行数和列数&#xff09; % 创…

哨兵1号(Sentinel-1)SAR卫星介绍

1. 哥白尼计划 说起欧空局的哨兵1号&#xff0c;就不得不先说一下欧空局的“哥白尼计划”。 欧空局的哥白尼计划&#xff08;Copernicus Programme&#xff09;是欧空局与欧盟合作的一项极其重要的地球观测计划。该计划旨在提供免费开放的、可持续的地球观测数据&#xff0c…

服务器时间正确,Java程序时区不对问题解决

服务器执行date命令显示时间正确 执行timedatectl status命令结果如下&#xff1a; 看起来是Time zone没有设置好&#xff0c;但是登录另外一台正常的服务器&#xff0c;执行timedatectl status也是一样的 直接写一个简单的Java程序TestTimeZone.java&#xff1a; import ja…

【linux基础(六)】Linux中的开发工具(中)--gcc/g++

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux中的开发工具 1. 前言2.…

selenium 网页自动化-在访问一个网页时弹出的浏览器窗口,我该如何处理?

前言 相信大家在使用selenium做网页自动化时&#xff0c;会遇到如下这样的一个场景&#xff1a; 在你使用get访问某一个网址时&#xff0c;会在页面中弹出如上图所示的弹出框。 首先想到是利用Alert类来处理它。 然而&#xff0c;很不幸&#xff0c;Alert类处理的结果就是没…

LeetCode——动态规划篇(二)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 343. 整数拆分 - 力扣&#xff08;LeetCode&#xff09; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整…

【转存】从 JMM 透析 volatile 与 synchronized 原理

在面试、并发编程、一些开源框架中总是会遇到 volatile 与 synchronized 。synchronized 如何保证并发安全&#xff1f;volatile 语义的内存可见性指的是什么&#xff1f;这其中又跟 JMM 有什么关系&#xff0c;在并发编程中 JMM 的作用是什么&#xff0c;为什么需要 JMM&#…

ArcGIS 10.2安装教程!

软件介绍&#xff1a;ArcGIS是一款专业的电子地图信息编辑和开发软件&#xff0c;提供一种快速并且使用简单的方式浏览地理信息&#xff0c;无论是2D还是3D的信息。软件内置多种编辑工具&#xff0c;可以轻松的完成地图生产全过程&#xff0c;为地图分析和处理提供了新的解决方…

PPT 生成整数序列字典序的r-组合算法

生成整数序列字典序的r-组合算法 一、PPT效果展示二、问题2.1 简述2.2 算法简述2.3 例子 三、PPT实现 一、PPT效果展示 二、问题 2.1 简述 给定一个整数序列 (1&#xff0c;2&#xff0c;3&#xff0c;…n)&#xff0c;输出其所有字典序的r-组合&#xff0c;注意事项&#xf…

QT子线程或自定义类操作访问主界面UI控件的几种方法

前言 QT创建窗体工程&#xff0c;一般在MainWindow或Dialog类里可以直接通过ui指针访问控件&#xff0c;但是添加新的类后又如何访问呢&#xff0c;可以通过以下几种方式&#xff1a; 将ui指针公开后直接访问 &#xff08;1&#xff09;例如有个自己定义的类CustomCl…

【Redis】深入探索 Redis 的数据类型 —— 列表 List

文章目录 一、List 类型介绍二、List 类型相关命令2.1 LPUSH 和 RPUSH、LPUSHX 和 RPUSHX2.2 LPOP 和 RPOP、BLPOP 和 BRPOP2.3 LRANGE、LINDEX、LINSERT、LLEN2.4 列表相关命令总结 三、List 类型内部编码3.1 压缩列表&#xff08;ziplist&#xff09;3.2 链表&#xff08;lin…

《向量数据库指南》——Milvus Cloud云原生分布式向量数据库的优势有哪些?

首先解释一下什么是分布式,什么是云原生。分布式的概念相对容易理解,就是系统的各个组件在不同的节点上进行协作和分工,以实现更大规模和更高性能的处理。而云原生并不仅仅指运行在 Kubernetes(K8s)上或在公有云上的服务。在我的理解中,分布式云原生意味着系统首先是一个…

【Java 基础篇】Java可变参数:灵活处理不定数量的方法参数

在Java编程中&#xff0c;可变参数是一项强大的功能&#xff0c;它允许你编写更加灵活的方法&#xff0c;接受不定数量的参数。本文将详细解释Java可变参数的用法、语法以及最佳实践。 什么是可变参数&#xff1f; 可变参数是Java 5引入的一项功能&#xff0c;它允许你在方法…