RESTFUL_规范化开发

    当一个理论被提出的时候,一个公司的技术决策层通常需要考虑到这个理论的可行性,然后去验证落地的可能性。
      我们在实施SOA关于接口的过程中,通常有以下流程:定义规范,然后根据规范去生成服务端客户端代码框架,然后部署到OSB或者其他平台上。在这之前,曾经主导设计了一个REST风格的数字售楼系统,用的是SPIRNG MVC,当然前端有多种,flex,jsp,android等等。但是如今看来,那个系统的设计框架虽然考虑到了安全验证,转码,TOKEN授权机制等等,但是如果做多系统集成,那个框架却忽视了一个很重要的东西--规范。因此我们可以采下面这种开发方式。

      一。定义规范,规范的目的就是定义双方交换的数据格式。比如我们定义一个导入数据的规范,ImportAcountInfoSrv.XSD。这个规范里我们定义验证头信息,输入,输出等内容。如下
    
        <import namespace="http://mss.cmcc.com/MsgHeader"   
            schemaLocation="MsgHeader.xsd"/>
        <import namespace="http://mss.cmcc.com/ImportSrvResponse" 
            schemaLocation="ImportSrvResponse.xsd"/>   
        <element name="SB_EMT_EMT_ImportAcountInfoSrvRequest"  
            type="tns:SB_EMT_EMT_ImportAcountInfoSrvRequest"/>
        <element name="SB_EMT_EMT_ImportAcountInfoSrvResponse"  
            type="tns:SB_EMT_EMT_ImportAcountInfoSrvResponse"/>
            .............

   二。生成实体类,用JDK自带工具xjc.bat生成实体对象如下
                SBEMTEMTImportAcountInfoSrvRequest.java
                SBEMTEMTImportAcountInfoSrvResponse.java
                SBEMTEMTImportAcountInfoSrvInputCollection.java
                SBEMTEMTImportAcountInfoSrvInputItem.java
                .....................
  
   三。编写服务端代码 RestController.java
      
                 ..........
                @RequestMapping(method=RequestMethod.POST, 
                                 value="/importaccount")
           public ResponseEntity<String> importAccountSrv(
                                 @RequestBody String body){
                .............
                StringReader reader = new StringReader(body);
           Unmarshaller unmar = context.createUnmarshaller();
           SBEMTEMTImportAcountInfoSrvRequest saisr =    
                            (SBEMTEMTImportAcountInfoSrvRequest)
                   unmar.unmarshal(reader);
                                  ..............

                String res = convertObjToXml(sair);
       HttpHeaders resHeaders = new HttpHeaders();
       resHeaders.setContentType(MediaType.TEXT_PLAIN);
                return new ResponseEntity<String>(res, resHeaders,
                HttpStatus.CREATED);  
            }
        上面的代码关键是JAXB2反解析序列化后字符串,并将数据填充到我们生成的对
           象中。同样在返回SBEMTEMTImportAcountInfoSrvResponse对象实例时候
           ,需要经过JAXB2序列化。

                              .............
                Marshaller marshaller = context.createMarshaller();  
                              ..............
                StringWriter writer = new StringWriter();
                marshaller.marshal(sair, writer);
                String xml = writer.toString();

    四。编写客户端代码 RestClient
                rest.postForObject
         ("http://localhost:8080/SpringRest/service/importaccount", 
                requestStr, String.class);
               其他部分和服务端逆过程即可。
           
           
      

你可能感兴趣的:(Restful)