HTTP API

我们提供了 HTTP API (建议使用)和 socket API ,分别对应 ghttp gserver

本章节提供了使用 http 服务的 API ,在服务器端运行 ghttp 时使用。和 socket API 相比, HTTP API 更稳定且能保持连接,也更规范,而 socket API 不保证传输正确,所以网络传输会更快。

 

简单样例

我们目前提供了 JAVA C++ Python PHP Nodejs HTTP API 。请参考 api/http 的样例代码。要使用这些样例,请确保已经生成了可执行程序。

接下来, 用 bin/ghttp 指令启动 gStore 服务器。 如果你知道一个正在运行的可用的 gStore 服务器,你可以尝试连接它,请注意服务器 ip 、服务器和客户端的端口号必须匹配。 (样例使用默认设置,不需要更改。)之后,对于 Java 和 C++ ,你需要在 gStore/api/ 目录下编译样例代码。

最后,打开样例目录并运行相应的可执行程序。这些程序发出 HTTP 请求连接到指定的 gStore 服务器并做一些加载或查询操作。请确保你在运行样例的终端还者浏览器中看到了查询结果,如果没有,请参阅【FAQ】 一章或向我们报告。

我们建议你仔细阅读样例代码和相应的 Makefle 。这会帮助你理解 API ,特别是如果你想基于 API 接口写自己的程序。

 

C++ API

要使用 C++ HTTP API ,请在你的 cpp 代码中加入 #include "client.h" client.h 中的函数可以如下调用:

// 初始化
GstoreConnector gc("172.31.222.93", 9016);
//
从一个 RDF 文件新建数据库
// 注意,采用以 gserver 为基础的相对路径
gc.build("test", "data/lubm/LUBM_10.n3", "root", "123456");
// load
刚才 build 好的数据库
gc.load("test", "root", "123456");
//
之后就可以在这个数据库上执行 SPARQL 查询
std::string answer = gc.query("root", "123456", "test", sparql);
std::cout << answer << std::endl;
//
执行一个 SPARQL 查询,并将结果保存到 ans.txt
gc.query("root", "123456", "test", sparql, "ans.txt");
// unload
这一数据库
gc.unload("test", "root", "123456");
//
你也可以直接 load 已存在的数据库并进行查询
gc.load("lubm", "root", "123456");
answer = gc.query("root", "123456", "lubm", sparql);
std::cout << answer << std::endl;
gc.unload("lubm", "root", "123456");

原始的函数声明如下:

GstoreConnector();
bool build(std::string _db_name, std::string _rdf_file_path, std::string usern

bool load(std::string _db_name, std::string username, std::string password);
bool unload(std::string _db_name, std::string username, std::string password);
void query(std::string username, std::string password, std::string db_name, st
std::string query(std::string username, std::string password, std::string db_n

 

Java API

要使用 Java API,请参照 gStore/api/http/java/src/jgsc/GstoreConnector.java 。函数应该如下调用:

// 初始化
GstoreConnector gc = new GstoreConnector("172.31.222.78", 3305);
// build
数据库
gc.build("LUBM10", "data/lubm/lubm.nt", "root", "123456");
// load
刚才 build 的数据库
gc.load("LUBM10", "root", "123456");
//
你也可以直接 load 已存在的数据库并进行查询
gc.load("LUBM10", "root", "123456");
//
执行 SPARQL 查询
answer = gc.query("root", "123456", "LUBM10", sparql);
System.out.println(answer);
//
执行 SPARQL 查询并将结果保存到 ans.txt
gc.query("root", "123456", "LUBM10", sparql, "ans.txt");
// unload
数据库
gc.unload("LUBM10", "root", "123456");

这些函数的原始声明如下:

public class GstoreConnector();
public boolean build(String _db_name, String _rdf_file_path, String _username
public boolean load(String _db_name, String _username, String _password);
public boolean unload(String _db_name,String _username, String _password);
public String query(String _username, String _password, String _db_name, Stri
public void query(String _username, String _password, String _db_name, Strin

 

Python API

要使用 Python API ,请参照 gStore/api/http/python/src/GstoreConnector.py 。函数应该如下调用:

# 给定 IP 和端口号,启动 gc
gc = GstoreConnector.GstoreConnector("172.31.222.78", 3305)
#
从一个 RDF build 数据库
ret = gc.build("test", "data/lubm/lubm.nt", username, password)
# load
数据库
ret = gc.load("test", username, password)
#
查询
print (gc.query(username, password, "test", sparql))
#
查询并将结果保存至文件
gc.fquery(username, password, "test", sparql, filename)
# unload
数据库
ret = gc.unload("test", username, password)

函数的原始声明如下:

public class GstoreConnector()
def build(self, db_name, rdf_file_path, username, password):
def load(self, db_name, username, password):
def unload(self, db_name, username, password):
def query(self, username, password, db_name, sparql):
def fquery(self, username, password, db_name, sparql, filename):

Php API

要使用 Php API ,请参照 gStore/api/http/php/src/GstoreConnector.php。函数应该如下调用:

// 启动 gc
$gc = new GstoreConnector("172.31.222.78", 3305);
// build
数据库
$ret = $gc->build("test", "data/lubm/lubm.nt", $username, $password);
echo $ret . PHP_EOL;
// load rdf
$ret = $gc->load("test", $username, $password);
echo $ret . PHP_EOL;
//
查询
echo $gc->query($username, $password, "test", $sparql) . PHP_EOL;
// fquery--
查询并将结果保存到文件
$gc->fquery($username, $password, "test", $sparql, $filename);
// unload rdf
$ret = $gc->unload("test", $username, $password);
echo $ret . PHP_EOL;

函数的原始声明如下:

class GstoreConnector
function build($db_name, $rdf_file_path, $username, $password)
function load($db_name, $username, $password)
function unload($db_name, $username, $password)
function query($username, $password, $db_name, $sparql)
function fquery($username, $password, $db_name, $sparql, $filename)

 

Nodejs API

使用 Nodejs API 之前,在 nodejs 文件夹下输入 npm install request  npm install request-promise 来安装需要的模块。

要使用 Nodejs API,请参照 gStore/api/http/nodejs/index.js 。函数应该如下调用:

# start a gc with given IP and Port
gc = new GStoreClient(username, password, "http://127.0.0.1:9000")
# build database with a RDF graph
ret = gc.build("test", "data/lubm/lubm.nt")
# load the database
ret = gc.load("test")
# query
print (gc.query("test", sparql))
# unload the database
ret = gc.unload("test")

这些函数的原始声明如下:

class GStoreClient
async build(db = '', dataPath = '')
async load(db = '')
async unload(db = '')
async query(db = '', sparql = '')