跳到内容

开放引用/分支

存储库文件导航

Python包 新闻报道

SPARQL端点上的Restful API管理器(RAMOSE)

Restful API Manager Over SPARQL Endpoints(RAMOSE)是一个应用程序,它允许根据特定的规范文档敏捷地开发和发布用于查询SPARQL端点的Restful API文档。

总有机碳

配置

要求

RAMOSE与Python 3.7到3.10兼容。要安装RAMOSE,请使用:pip安装分支pip3安装分支。您可以找到文档在这里.

论据

RAMOSE应用程序接受以下参数:

-h、 --帮助显示此帮助消息并退出-s SPEC,--SPEC SPEC包含API规范的哈希格式文件。-m方法,--方法方法用于向API发出请求的方法。-c CALL,--CALL CALL用于查询API的URL。-f FORMAT,--格式FORMAT获取响应的格式。-d、 --doc Say生成API的HTML文档(如果指定了,则不会考虑所有参数“-m”、“-c”和“-f”)。-o输出,--输出OUTPUT存储响应的文件。-w WEBSERVER,--Web服务器WEBSERVER用于部署Flask Web服务器以测试API的host:port。-css css,--css css用于设置API文档样式的.css文件的路径(使用“-w”或“-d”和“-o”参数指定)。

-秒是标识API配置文件(哈希格式规范文件,.hf(毫米波)).

哈希格式配置文件

哈希格式文件(.hf(毫米波))是一个规范文件,其中包含有关API的元数据、允许执行的操作、描述和在SPARQL端点上执行操作的指令。这个.hf(毫米波)RAMOSE解析文件以执行请求的操作并生成API文档。

语法基于简化版本的标记,它包含一个或多个部分,由空行分隔。

#<field_name_1><field_value_1>#<field_name_1><field_value_2>#<字段名称3><字段值3>#<field_name_n><field_value_n>...

规范的第一部分包括有关API的强制性信息,即:

#url<api_base>_pAPI的部分url_#type api _节的类型_#基础<base_url>_url基础_#方法<get|post>#标题<api_title>#说明<api_description>#版本<版本号>#许可证<许可证>#联系人<contact_url>in表单[文本](url)_#端点<sparql_endpoint_url>#addon<addon_file_name>_可选的附加python模块_

这个领域#网址包含API的部分URL,而字段#底座包括可与其他服务或API共享的URL库。

[N.B.多个API可能共存并由RAMOSE处理,因此字段中指定了路径#网址对应于API的唯一标识符。]

例如:

#url/api/v1#类型api#底座https://w3id.org/oc/wikidata网站#方法站#标题Wikidata REST API#description Wikidata的RAMOSE API实现#版本0.0.2#许可证本文件获得[知识共享署名4.0国际许可证]许可(https://creativecommons.org/licenses/by/4.0/legalcode),而REST API本身是使用[RAMOSE]创建的(https://github.com/opencitations/ramose),[Silvio Peroni]创建的*Restful API Manager Over SPARQL Endpoints*(https://orcid.org/0000-0003-0530-4305),使用[ISC许可证]进行许可(https://opensource.org/licenses/ISC). 此API返回的所有数据均在[知识共享公共领域专用(CC0)]下免费提供(https://creativecommons.org/publicdomain/zero/1.0/).#联系人[contact@opencitations.net](邮寄至:contact@opencitations.net)#端点https://query.wikidata.org/sparql#加载项test_addon

规范文件的其他部分详细介绍了API在允许的每个操作中的行为。每个操作对应一个部分。

#url<operation_url>{var}_partial操作url和变量名_#type operation _节的类型_#输入变量的可选验证器_#用于插件文件中定义的预处理的预处理方法_#插件文件中定义的后处理的后处理方法_#方法<get|post>#描述<操作描述>#调用<示例请求调用>#field_type<var_type_list>_list of(SPARQL查询)变量及其类型_#output_json<示例json响应>#sparql<sparql_query>_sparql查询将在端点上执行_

例如:

#url/metadata/{dois}#类型操作#dois str(\“?10\..+[^_\”]((__|\“\”)10\+[^_])*\"?)#预处理上部(dois)-->split_dois(dois#后处理distinct()#方法get#description此操作检索由输入DOI标识的所有项目的元数据。#调用/元数据/10.1108/jd-12-2013-0166_10.1038/nature12373#field_type str(qid)str(author)datetime(year)str#输出json[{“source_title”:“文档期刊”,“第”页:“253-277”,...},{“source_title”:“自然”,“第”页:“54-58”,...}]#sparql前缀wdt:<http://www.wikidata.org/prop/direct/>选择?作者?年?标题?源标题?音量?问题?页面?做什么?参考?引用计数?齐德{价值观?doi{[[dois]]}?文章wdt:P356?doi。绑定(过滤机(str(?article),“http://www.wikidata.org/实体/“)作为?qid)。{选择DISTINCT?文章(GROUP_CONCAT(?cited_doi;separator=“;”)作为?参考){价值观?doi{[[dois]]}?文章wdt:P356?doi。可选{?文章wdt:P2860?引用。可选{?引用wdt:P356?引用_日期。}}}分组依据?文章}{选择?文章?doi(count(?doi)as?引文计数){价值观?doi{[[dois]]}?文章wdt:P356?doi。可选{?文章^wdt:P2860?其他}}分组依据?文章?国防部}可选{?文章编号:P1476?标题}可选{?文章编号:P577?日期绑定(SUBSTR(str(?date),0,5)as?年)}可选{?文章wdt:P1433/wdt:P2476?源_标题}可选{?文章编号:P478?卷}可选{?文章wdt:P433?问题}可选{?文章wdt:P304?页面}{选择?文章?doi(GROUP_CONCAT(?a;separator=“;”)as?作者){价值观?doi{[[dois]]}{选择?文章?做什么?一个{价值观?doi{[[dois]]}?文章wdt:P356?doi。可选{?文章wdt:P50?author_res。?author_res wdt:P735/wdt:P1705?名称;wdt:P734/wdt:P1705?f _名称。绑定(CONCAT(?f_name,“,”,?g_name)为?a)}}分组依据?文章?做什么?按DESC订购(?a)}}分组依据?文章?国防部}}极限1000

加载项python文件

可以为API URL调用中的预处理变量和后处理响应添加其他python模块。在规范文件中,在#插件字段,方法是记录python文件的名称。

预处理

RAMOSE根据#预处理字段(例如。“#预处理降低(doi)”),应用于指定为所考虑函数输入的URL的指定参数(例如“/api/v1/cities/10.1108/jd-12-2013-0166”,将DOI转换为小写)。

通过将多个函数与-->API规范文档中。在这种情况下,函数的输出f_i将成为函数的输入操作URLf_i+1.

最后,值得一提的是#预处理字段必须返回一个字符串元组,定义如何更改URL参数指示的特定值。

后处理

RAMOSE接受对三元组存储执行的SPARQL查询返回的结果表(在API操作中指定为输入),并根据#后处理字段(例如。“#postprocess remove_date(“2018”)”).

这些函数可以将参数作为输入,而第一个未指定的参数将始终是结果表。值得一提的是,这个结果表(即元组列表)实际上在每个单元格中包含一个元组,定义普通值和类型值,以便在需要时进行更好的比较和操作。该结果表的示例如下所示:

[(“id”,“date”),(“my_id_1”,“my_id _1”),(日期时间(2018年3月2日),“2018-03-02”),...]

此外,可以通过将多个函数与"-->"API规范文档中。在这种情况下,函数的输出f_i将成为函数的输入结果表f_i+1.

postprocess函数应该输出一个包含结果的元组,以及函数是否需要返回结果中的值类型。

运行RAMOSE

在本地运行

通过指定配置文件和所需操作的URL(包括参数),可以通过CLI运行RAMOSE。例如,在根目录中运行:

python-m ramose-s<conf_name>.hf-c'<api_base><api-operation_url><参数>'

结果以以下格式在shell中传输:

#响应HTTP代码:<status_code>#正文:<response_content>#内容类型:<format>

输出格式。RAMOSE以两种格式返回响应,即:文本/csv应用程序/json。格式可以指定为参数的值-(f)或者,作为调用的参数。例如:

python-m ramose-f<csv|json>-s<conf_name>.hf-c'<api_base><api_aperation_url>|<api_ base><api操作_url><参数>'python-m ramose-s<conf_name>.hf-c'<api_base><api_操作url>|<api=操作url>?format=<csv|json>'

如果未指定格式,则返回JSON响应。

输出。要在本地文件中存储响应,请使用参数-o个指定输出文件:

python-m ramose-s<conf_name>.hf-c'<api_base><api-operation_url><参数>“-o”<文件名><格式>'

API文档。要生成包含自动生成的API文档的HTML文档,请使用参数-d日-o个指定输出文件:

python-m ramose-s<conf_name>.hf-d-o<doc_name>.html

使用Web服务器运行

此外,可以通过将Flask Web服务器指定为参数值来进行测试和调试-w个所需的<主机>:<端口>。例如,要在localhost中运行API:

python-m分支-s<conf_name>.hf-w 127.0.0.1:8080

web应用程序包括:

  • 用于跟踪API调用的基本仪表板(位于<主机>:<端口>/)
  • API文档(可在<host>:<port>/<api_base>)

本地API可以通过浏览器或curl进行测试:

curl-X GET--header“接受:<format>”“http://<host>:<port>/<api_base><operation_url>?<parameters>”

自定义CSS无论是通过CLI还是通过Web服务器运行,都可以在-css公司参数设置仪表板和文档页面的样式。

python-m ramose-s<conf_name>.hf-w 127.0.0.1:8080-css<path/to/file.css>

拉莫斯API经理

RAMOSE允许开发人员通过实例化主类来处理多个APIAPI经理并使用规范文件对其进行初始化。

方法获取操作(op_complete_url)输入调用的url(即API基url加上操作url)并返回类型为的对象操作。的实例操作可用于运行该方法exec(method=“get”,content_type=“application/json”),它接受用于调用的HTTP方法和要返回的内容类型的url输入,并通过运行(按以下顺序)执行规范文件中指示的操作:

  1. 预处理查询的方法(如#{var}(变量)#预处理);
  2. 通过使用URL中指示的参数,与调用的操作相关的SPARQL查询(#斯巴克尔);
  3. 返回的各种行的所有类型的规范(#字段_类型);
  4. 对结果进行后处理的方法(#后处理);
  5. 应用过滤器删除、过滤、排序结果(参数);
  6. 删除在步骤3中添加的类型,以便准备好返回数据结构;
  7. 以用户请求的格式进行转换(内容_类型).

例如:

api_manager=api管理器([“1_v1.hf”,“2_v1.hf”])api_base_1=“…”api_base_2=“…”operation_url_1=“…”operation_url_2=“…”request=“…”call_1=“%s/%s/%s”%(api_base_1,operation_url_1,请求)call_2=“%s/%s/%s”%(api_base_2,operation_url_2,请求)op1=api管理器.get_op(call_1)状态1,结果1,结果格式1=op1.exec()op2=api管理器.get_op(调用2)状态2,结果2,结果格式2=op2.exec()

其他功能和示例

参数和过滤器

参数可用于筛选和控制API返回的结果。它们作为普通HTTP参数在调用的URL中传递。他们是:

  • require=<field_name>:中具有空值的所有行<字段名称>从结果集中删除指定的-例如。require=给定名称删除中未指定任何字符串的所有行给定名称字段。

  • filter=<field_name>:<operator><value>:结果集中只保留符合的行。参数<操作>不是强制性的。如果<操作>未指定,<值>被解释为正则表达式,否则通过指定的操作进行比较。可能的运算符为“=”、“<”和“>”。例如,filter=title:语义?返回字段标题中包含字符串“semantic”或“semantics”的所有行,而过滤器=日期:>2016-05返回日期大于2016年5月的所有行。

  • 排序=<顺序>(<field_name>):按升序排序(<订单>设置为“asc”)或下降(<订单>设置为“描述”)根据中的值对结果集中的行进行排序<字段名称>例如,sort=描述(日期)根据字段日期中指定的值按降序对所有行进行排序。

  • format=格式类型:以中指定的格式返回最终表<格式_类型>可以是任意一种“csv”“杰森”-例如。格式=csv以CSV格式返回最终表格。此参数具有通过请求的“Accept”标头指定的类型的更高优先级。因此,如果API请求的头指定接受:text.csv该请求的URL包括格式=json,最后一个表以JSON格式返回。

  • json=<操作类型>(“<分隔符>”,<字段>,<新字段_1>,<新建字段_2>,…):如果请求返回JSON格式,请根据指定的规则转换最终JSON表的每一行。如果<操作类型>设置为“数组”,与字段名关联的字符串值<字段>通过以下方式拆分各个文本部分,将其转换为数组<分隔符>例如,考虑JSON表[{“名字”:“Doe,John;Doe,Jane”},…],执行数组(“;”,名称)收益[{“名字”:[“Doe,John”,“Doe、Jane”],…]相反,如果<操作类型>设置为“dict”(字典),与字段名关联的字符串值通过和关联新字段来拆分各种文本部分,从而转换为字典<新字段_1>,<新字段_2>等。例如,考虑JSON表[{“name”:“Doe,John”},…],执行dict(“,”,name,fname,gname)收益[{“name”:{“fname”:“Doe”,“gname”:“John”},…].

可以指定一个或多个同类过滤操作(例如。require=给定名称&require=family_name). 此外,这些过滤操作按上述顺序应用-首先所有要求操作,然后所有滤波器所有分类操作,最后是格式杰森操作(如适用)。值得一提的是,前面提到的每一条规则都是按顺序应用的,它适用于执行前面的规则后返回的结构。

例子:

<api_operation_url>?require=doi&filter=date:>2015&sort=desc(date)。

示例

从CLI查询wikidata端点

使用以下文件测试应用程序。

  • 测试/ramose.py
  • 测试/测试.hf
  • 测试/test_addon.hf

问题1检索与doi标识的工作相关的书目元数据10.1080/14756366.2019.1680659:

python-m ramose-s test.hf-c'/api/v1/metadata/10.1107/S0567740872003322'

退货:

#响应HTTP代码:200#正文:[{“作者”:“”,“年份”:“1972年”,“title”:“硫酸锡(II)的晶体结构”,“source_title”:“晶体学学报,B辑”,“卷”:“28”,“问题”:“3”,“页码”:“864-867”,“doi”:“10.1107/S0567740872003322”,“引用”:“”,“引文计数”:“1”,“qid”:“Q29013687”}]#内容类型:application/json

第2季度检索由doi标识的作品列表的书目元数据,以__如字段中所指定#国防部属于测试.hf--,并在中返回数据脑脊液病毒格式。

python-m ramose-s test.hf-c’/api/v1/metadata/10.1107/S0567740872003322_10.1007/BF02020444?格式=csv'

退货:

#响应HTTP代码:200#正文:作者、年份、标题、源标题、卷、期、页、doi、参考、引用计数、qid1972年,《硫酸锡(II)的晶体结构》,《结晶学学报》。B部分,28,3864-867,10.1107/S0567740872003322,,1,Q29013687“Erdős,Paul;Hajnal,András”,1966年,关于图和集合系统的色数,匈牙利数学学报,17,1-2,61-99,10.1007/BF02020444,10.4153/CJM-1959-003-9,1,Q57259020#内容类型:text/csv

第3季度执行第2季度并按年份按升序对结果进行排序:

python-m ramose-s test.hf-c’/api/v1/metadata/10.1107/S0567740872003322_10.1007/BF02020444?format=csv&sort=asc(年份)'

第4季度执行第3季度但以JSON格式返回,并使用分隔符拆分作者姓名;

python-m ramose-s test.hf-c’/api/v1/metadata/10.1107/S0567740872003322_10.1007/BF02020444?format=json&sort=asc(year)&json=array(“;”,author)'

退换商品

#响应HTTP代码:200#正文:[{“作者”:[“Erdős,Paul”,“哈伊纳尔,安德拉斯”],“年份”:“1966”,“title”:“关于图和集系统的色数”,“source_title”:“匈牙利数学学报”,“卷”:“17”,“问题”:“1-2”,“第”页:“61-99”,“doi”:“10.1007/BF02020444”,“参考”:“10.4153/CJM-1959-003-9”,“引文计数”:“1”,“qid”:“Q57259020”},{“作者”:[],“年份”:“1972年”,“title”:“硫酸锡(II)的晶体结构”,“source_title”:“晶体学学报,B辑”,“音量”:“28”,“问题”:“3”,“第”页:“864-867”,“doi”:“10.1107/S0567740872003322”,“引用”:“”,“citation_count”:“1”,“qid”:“Q29013687”}]#内容类型:application/json

从Web服务器查询wikidata端点

执行第2季度从本地Web服务器

python-m分支-s<conf_name>.hf-w 127.0.0.1:8080curl-X GET--标题“接受:text/csv”http://localhost:8080/api/v1/metadata/10.1107/S0567740872003322_10.1007/BF02020444?format=csv"

可以在浏览器上直接执行相同的查询http://localhost:8080/api/v1/metadata/10.1107/S0567740872003322_10.1007/BF02020444?format=csv