参照
https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/21.4/aelig/developing-REST-applications.html#GUID-A1CD111F-724B-4E91-8202-FA899EE521F1
https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/21.4/qsord/get-started-with-oracle-rest-data-services.html#GUID-4F651A96-1E4F-4048-AE70-3136AC2A409A
概念术语
RESTful service:一个遵从RESTful风格的HTTP web service
Resource module:一个用来将相关resource templates组织在一起的单元
Resource template:一个单独的RESTful service,能够请求一些URIs
URI pattern:resource template的一个pattern,可以是route pattern,也可以是URI template,鼓励使用route pattern
Route pattern:一种pattern,将URI的路径部分分解成它的组成部分。例如,/:object/:id?将匹配/emp/101(匹配一个请求,该请求是在带有101 id 的emp resource中找the item),并且也会匹配/emp/(匹配for emp resource资源的请求,是因为:id参数被?标注了,这意味着id parameter是可选的)
URI template:一个简单的语法,即一个给定的resource template能够处理,定义URIs(们)的特定patterns(们)。例如,the pattern employees/{id} 将匹配任何path以employees/开头的URI ,例如employees/2560。
Resource handler:为resource template对应的HTTP方法提供处理逻辑。例如,先前所说的resource template的 GET HTTP方法的处理逻辑,如下所示:
select empno, ename, dept from emp where empno = :id
HTTP operation:HTTP(HyperText Transport Protocol)定义了若干标准方法,它们可以作用于resources。这些方法包括:GET(获取即读取resource内容们)、POST(存储一个新resource)、PUT(更新一个现有resource)、DELETE(移除一个resource)
发布数据
表视图
表、视图都可以直接发布为RESTful service,要将一个表或者视图做成能REST访问,按照如下步骤:
- 创建一个用户,本文中可直接使用之前安装ords时用的test用户。
- 创建一个表,并插入测试数据,直接使用之前安装ords时用的test用户的ttest表。
- 首先使test用户能够REST,在SQL Developer中,右键test用户的连接,选择REST Services -> Enable RESTful Services
启用,但不进行授权管理。
点击【完成】
Enable ttest table,在SQL Developer中,右键ttest表,选择REST Services -> Enable RESTful Services。
启用对象,但不启用权限管理
点击【完成】
现在模式(即用户)test中的表ttest就被作为一个REST HTTP端点被暴露出来了。此时GET、DELETE、PUT、POST以及metadata-catalog端点都是同时生成暴露的。
在浏览器中,输入URL
访问ttest表:http://192.168.12.55:8080/ords/test/ttest
访问模式包含哪些表即元数据:http://192.168.12.55:8080/ords/test/metadata-catalog
详细进行以下数据库操作时调整表ttest,增加两列数据
alter table ttest add c2 varchar2(100);
alter table ttest add c3 varchar2(100);
alter table ttest add c4 number(10,0);
truncate table ttest
insert into ttest (c1,c2,c3,c4) values('c','cc','ccc',1);
insert into ttest (c1,c2,c3,c4) values('y','yy','yyy',2);
insert into ttest (c1,c2,c3,c4) values('h','hh','hhh',3);
commit;
以下内容均使用Postman进行的测试
查询
可以指定过滤,也支持分页
查询条件是Filter即一种json对象。按照json形式书写即可。
插入
表可以进行插入,视图不一定,要符合oracle规则
查询确认
更新
表必须有主键,并且没有触发器给主键分配值。
alter table ttest add constraint pk_ttest primary key(c4);
KeyValues是主键值
存在则更新,不存在则新增。
除了主键值,其他没有被json赋值的字段,均被置为null。主键值即使赋值为别的值,也不会变动,仍然会是原来的主键值,例如本例中的4,即使在json中赋值为5,但最终结果仍然是4,也就说已有的主键值不能被更新。
删除
sql查询验证
sql查询
可以直接在用户(模式):REST数据服务 -> 模块 创建sql查询的REST Service。
也可以创建REST服务连接,通过连接创建sql查询的REST Service。以下按照第二种方式的步骤创建sql查询的REST Service。
Oracle REST Data Services提供了一个REST API(被称为Resource Modules API),该API可以让Oracle SQL Developer去创建和编辑RESTful service。这种方式是当你没法直接访问数据库时的一种方式(之前描述的是直接访问数据库的方式添加RESTful Service)。Resource Modules API的访问是被保护的,访问它的用户要有正确的角色,并且从SQL Developer访问时还要有相应的授信。具体步骤如下:
备注:发布数据,可以使用创建ords时的数据库用户(模式)test操作,但是稍后的注册客户端必须要使用2.2.1中创建的用户操作。
创建用户
在Oracle REST Data Services安装的目录,输入如下命令
java -jar ords.war user test_developer "SQL Developer"
创建连接
创建RESTful连接。在SQL Developer中,选择 view -> REST Data Service -> Development。
在REST Development面版,右击 REST Data Services -> Connect
在RESTful Service Connection对话框,点击【+】,增加一个连接。
在RESTful Services连接对话框中,输入必要的信息。
点击【确定】
点击【确定】,按照提示,输入用户test_developer的密码。
创建模块
在REST Development view,右击模块节点,点击新建模块
在新建模块页面输入信息
指定模板,输入URI,其余保持默认即可
指定处理(handler即get等)
点击【完成】
handler
为get resource handler定义一个查询。
在REST Development界面,展开至最末级,get节点。右击选择打开。
在SQL工作表中输入 查询语句 select * from ttest
在REST Development界面,右击模块节点下的4test节点,单击【上载】,弹出对话框,点击【确定】。
在Postman中输入URL,http://192.168.12.55:8080/ords/test/testm/ttestget
查询参数
添加参数
绑定参数
上载
Postman验证如下,?p1=c&p4=1,参数必须写全。这样才能完整赋值。否则没有被赋值的参数,会默认是null。
但是查询参数不一定都是必输项。p1给值,p4不给值,查询不到任何结果。所以改造如下。
再次【上载】
Postman验证