概述#

随着互联网、平台模式的兴起,特别是MVP、MVVM模式的普及,服务端往往不需要再提供页面的渲染,而只需专注于业务服务的提供。
从4.1.0开始,Strato实现了JSON API功能,开发者可以通过@Restful*注解,快速将Java对象暴露成Json Rpc服务。

下面以一个简单的接口-实现类-客户端为例,纯粹使用Strato框架的系统可以很方便地开发出基于Json的API接口。

案例#

1. 接口定义
public interface TestService {

	@RestfulEntryPoint("/newUser")
	public ResponseBody<String> newUser(@RequestParam User u);

	@RestfulEntryPoint(method=RestfulEntryPoint.Method.POST)
	public ResponseBody<User> get(@RequestParam Long id);
}
2. 需要在接口方法上引用@RestfulEntryPoint注解,@RestfulEntryPoint注解的定义如下:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface RestfulEntryPoint {

	String AUTO = "(AUTO)";

	public enum Method{GET,POST};
	
	String value() default AUTO;
	
	Method method() default Method.POST;
}

3. 在实现类上引用@RestfulService注解

@RestfulService(path="/api/test")
public class TestServiceImpl implements TestService{

	@Override
//	@OAuth2SecurityConstraint("user_write")
	public ResponseBody<String> newUser(User u) {
		System.out.println(u.getAge());
		return null;
	}

	@Override
	public ResponseBody<User> get(Long id) {
		System.out.println(id);
		return null;
	}

	
}

4. 在客户端通过@RestfulReference引用服务

@Controller
public class TestController {

	@RestfulReference(endpoints={@RestfulEndpoint(url = "${strato.baseurl}/api/test")})
	private TestService testService;
	
	@RequestMapping("/test")
	public void test(){
		User u=new User();
		u.setAge(12);
		u.setBirthday(new Date());
		u.setCredits(1234.45f);
		u.setId(111L);
		u.setPassword("pass");
		u.setUsername("test");
		testService.newUser(u);
	}
}

工作机制#

上面的例子实际上暴露了两个API地址,一个是新增用户,一个是查询用户。假设strato.baseurl=http://localhost:8080,那么这两个API的地址分别为: 尽管采用@Restful*作为注解名称,但目前框架主要聚焦于Json和java RPC共存,并未按照Rest API的风格来提供实现,尽管如此,Json API能很好地实现大部分业务场景。

在线调试(DESCRIBE)#

为了方便开发者进行在线调试,框架内置了API接口自描述(DESCRIBE)机制,可以通过/strato/restful/describe/all来枚举所有的服务,并通过API地址/?DESCRIBE来描述服务。

服务清单#

上述案例中,可以通过http://localhost:8080/strato/restful/describe/all来枚举所有的接口。如下图所示:

服务描述#

可以API地址?DESCRIBE来查看接口描述并在线联调,例如: newUser: http://localhost:8080/api/test/v2/newUser?DESCRIBE

get: http://localhost:8080/api/test/v2/get?DESCRIBE

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-1) was last changed on 02-Jul-2017 18:32 by Jarez