课程章节介绍
各位同学,咱们今天来看看怎么用Apex写一个REST风格的Web服务,也就是让外部系统能够通过标准的HTTP方式来调用我们Salesforce里的逻辑。
首先,你需要把一个Apex类变成一个REST接口,这很简单,只要在类的声明前面加一个注解:`@RestResource`,然后在括号里写上`urlMapping`,也就是这个接口的访问路径。比如我写`@RestResource(urlMapping='/myApi/*')`,那别人就能通过末尾是 `/myApi/` 的地址来调用这个类。路径里这个星号就是通配符,可以匹配后面任意层级的子路径。
光有类还不够,还得指定它可以接收哪些HTTP方法。我们可以在类里的方法上继续加注解,比如 `@HttpGet`、`@HttpPost`、`@HttpPut`、`@HttpDelete`,分别对应查询、创建、更新和删除操作。一个类里可以有多个这样的方法,只要HTTP注解不同就行。
那在方法内部怎么拿到客户端发来的请求,又怎么返回结果呢?系统提供了一个叫 `RestContext` 的“工具箱”,它有两个静态成员:`request` 和 `response`。`RestContext.request` 这个对象里装满了请求的所有信息:你可以读取URL里带的参数、请求头、请求体(也就是JSON或XML内容),还有HTTP方法本身。而 `RestContext.response` 这个对象则让你来组装要返回给客户端的东西,比如设置响应状态码,比如200成功或404找不到,也可以往响应体里写字符串,还可以添加自定义的响应头。这就像你接待一位访客,request是访客递来的信件,response是你写好要交给对方的回信。
使用的时候有两个容量上的限制要特别注意:单个请求体不能超过6 MB,这是Salesforce为了保护系统定的;而一次响应的内容最大可以有12 MB。如果你传进来的数据太大或者想返回的数据超了限制,调用就会失败,所以设计接口时一定要控制好数据量。
关于安全认证,Apex REST服务支持标准OAuth 2.0认证,这也是推荐的现代方式。当然,你也依然可以使用传统的会话ID(Session ID)来验证身份,只要在请求头里带上就行。
最后要记住URL映射是区分大小写的,`/Account` 和 `/account` 是两个完全不同的地址。如果你在映射里定义了精确的路径,同时又有一个带星号的模糊匹配,那系统会优先匹配精确的那个。比如你同时定义了`/myApi/hello`和`/myApi/*`,那请求`/myApi/hello`时,会进精确的那个方法,而不是走到通配符里。
这一页的内容就这些,大家可以动手试试,写一个简单的查询接口出来,很快就能感受到Apex REST有多么简洁直接了。
关键词
Apex
Salesforce
Developer Guide