Restful Web Service
- 格式:pptx
- 大小:918.07 KB
- 文档页数:29
webservice和restful的区别REST是⼀种架构风格,其核⼼是⾯向资源,REST专门针对⽹络应⽤设计和开发⽅式,以降低开发的复杂性,提⾼系统的可伸缩性。
REST 提出设计概念和准则为:1.⽹络上的所有事物都可以被抽象为资源(resource)2.每⼀个资源都有唯⼀的资源标识(resource identifier),对资源的操作不会改变这些标识3.所有的操作都是⽆状态的REST简化开发,其架构遵循CRUD原则,该原则告诉我们对于资源(包括⽹络资源)只需要四种⾏为:创建,获取,更新和删除就可以完成相关的操作和处理。
您可以通过统⼀资源标识符(Universal Resource Identifier,URI)来识别和定位资源,并且针对这些资源⽽执⾏的操作是通过 HTTP 规范定义的。
其核⼼操作只有GET,PUT,POST,DELETE。
由于REST强制所有的操作都必须是stateless的,这就没有上下⽂的约束,如果做分布式,集群都不需要考虑上下⽂和会话保持的问题。
极⼤的提⾼系统的可伸缩性。
对于SOAP Webservice和Restful Webservice的选择问题,⾸先需要理解就是SOAP偏向于⾯向活动,有严格的规范和标准,包括安全,事务等各个⽅⾯的内容,同时SOAP强调操作⽅法和操作对象的分离,有WSDL⽂件规范和XSD⽂件分别对其定义。
⽽REST强调⾯向资源,只要我们要操作的对象可以抽象为资源即可以使⽤REST架构风格。
REST ful 应⽤问题是否使⽤REST就需要考虑资源本⾝的抽象和识别是否困难,如果本⾝就是简单的类似增删改查的业务操作,那么抽象资源就⽐较容易,⽽对于复杂的业务活动抽象资源并不是⼀个简单的事情。
⽐如校验⽤户等级,转账,事务处理等,这些往往并不容易简单的抽象为资源。
其次如果有严格的规范和标准定义要求,⽽且前期规范标准需要指导多个业务系统集成和开发的时候,SOAP风格由于有清晰的规范标准定义是明显有优势的。
C语言RESTful编程前言“RESTful” 是一种用于构建 Web 服务的软件架构风格。
它遵循一组特定的原则,可以使系统更加简单、轻便和易于扩展。
在本文中,我们将探讨如何使用 C 语言构建RESTful Web 服务。
什么是 RESTful?在 RESTful 中,所有的请求都映射到特定的资源。
资源可以是一个网页、一张图片、一段文本,或者是任何你希望在 Web 上公开的数据。
可以使用 HTTP 谓词(GET、POST、PUT、DELETE 等)来操作这些资源。
例如,GET请求可以用于检索资源,POST 请求可以用于创建资源,PUT 请求可以用于更新资源,DELETE 请求可以用于删除资源。
如何构建 RESTful Web 服务?构建 RESTful Web 服务有很多方式。
本文将介绍一种基于 C 语言的方法,使用了以下三个库:libevent、libmicrohttpd 和 cJSON。
libevent 是一个事件驱动的网络库,它支持 TCP/UDP/UNIX 套接字等多种协议。
它可以用于编写高可伸缩性的网络应用程序,如 Web 服务器、代理服务器和 DNS 服务器等。
libmicrohttpd 是一个小型 HTTP 服务器库,它可以用于构建小型 Web 服务。
它支持 HTTP GET、POST、PUT 和 DELETE 等所有 HTTP 方法,并且提供了简单的 API 用于处理 HTTP 请求和响应。
cJSON 是一个轻量级的 JSON 解析库,它可以在 C 程序中方便地解析和生成 JSON数据。
本文将使用这三个库来构建一个非常简单的 RESTful Web 服务。
这个服务可以用于查询和管理学生信息。
我们将会使用一个简单的 JSON 格式来表示学生信息。
示例代码注:以下代码中的数据是一些例子,实际应用中需要改变。
```#include <stdio.h>#include <stdlib.h>#include <string.h>#include <event2/event.h>#include <microhttpd.h>#include <cJSON.h>#define PORT 8080struct student {int id;char *name;char *email;};struct student students[] = {{1,"Bob","***************"},{2,"Alice","*****************"},{3,"Charlie","*******************"}, {4,"David","*****************"},{5,"Eve","***************"},};int num_students = sizeof(students) / sizeof(struct student); // Helper function to generate JSON responsechar *generate_student_json(struct student s) {cJSON *root = cJSON_CreateObject();cJSON_AddNumberToObject(root, "id", s.id);cJSON_AddStringToObject(root, "name", );cJSON_AddStringToObject(root, "email", s.email);char *json = cJSON_Print(root);cJSON_Delete(root);return json;}// HTTP GET handlerint handle_get(struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t*upload_data_size, void **ptr) {struct student *student = NULL;const char *id_str = MHD_lookup_connection_value(connection,MHD_GET_ARGUMENT_KIND, "id");if (id_str) {int id = atoi(id_str);student = get_student(id);if (!student) {return MHD_NO;}} else {cJSON *root = cJSON_CreateArray();for (int i = 0; i < num_students; i++) {char *json = generate_student_json(students[i]);cJSON *item = cJSON_Parse(json);cJSON_AddItemToArray(root, item);free(json);}char *json = cJSON_Print(root);cJSON_Delete(root);MHD_Response *response =MHD_create_response_from_buffer(strlen(json), json, MHD_RESPMEM_PERSISTENT);MHD_add_response_header(response, "Content-Type","application/json");int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);MHD_destroy_response(response);return ret;}char *json = generate_student_json(*student);MHD_Response *response = MHD_create_response_from_buffer(strlen(json), json, MHD_RESPMEM_PERSISTENT);MHD_add_response_header(response, "Content-Type", "application/json");int ret = MHD_queue_response(connection, MHD_HTTP_OK, response);MHD_destroy_response(response);free(json);return ret;}在上面的示例代码中,我们定义了一个 student 结构体表示学生信息。
Webservice接口请求方法一、概述Webservice是一种基于网络的应用程序接口(API),它能够通过网络来创建和提供服务。
在日常开发中,我们经常需要与其他系统进行交互,并获取相应的数据或服务。
Webservice接口请求方法就是用来实现这一目的的。
二、Webservice接口请求的方式1. HTTP GET请求:当我们需要从Webservice接口获取数据时,可以使用HTTP GET请求。
通过在URL中附加相应的参数,可以向服务端发送请求,并获取相应的数据。
GET请求的参数会以键值对的形式出现在URL中,例如:xxx。
2. HTTP POST请求:如果需要向Webservice接口提交数据,可以使用HTTP POST请求。
通过向服务端发送POST请求,我们可以将数据放入请求的body中,并提交给服务端进行处理。
3. SOAP请求:SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,通过SOAP请求可以实现不同评台之间的通信。
这种方式一般需要事先定义好XML格式的请求数据,并通过HTTP传输到服务端。
4. RESTful请求:RESTful(Representational State Transfer)是一种基于HTTP协议的设计风格,通过RESTful请求可以实现对资源的增删改查操作。
在RESTful请求中,通常使用HTTP的不同方法(如GET、POST、PUT、DELETE)来实现相应的操作。
三、Webservice接口请求的参数1. 请求URL:Webservice接口的请求位置区域,即服务端提供的接口位置区域。
2. 请求方法:即使用的HTTP方法,可以是GET、POST、PUT或DELETE等。
3. 请求头部:一些额外的请求头部信息,如Content-Type、Authorization等。
4. 请求参数:需要传递给服务端的参数,可以是键值对、JSON格式或XML格式的数据。
resttemplate调用webservice wsdlRestTemplate是Spring框架中的一个HTTP客户端工具类,可以用来访问RESTful API或者SOAP服务。
在使用RestTemplate调用Web Service时,需要先获取WebService的WSDL文件,然后根据WSDL 文件生成SOAP请求报文,最后发送HTTP请求,获取WebService的响应报文。
具体步骤如下:1. 在Spring配置文件中配置RestTemplate相关的Bean。
```<bean id='restTemplate'class='org.springframework.web.client.RestTemplate'><constructor-arg><beanclass='org.springframework.http.client.HttpComponentsClient HttpRequestFactory' /></constructor-arg></bean>```2. 根据WSDL文件生成SOAP请求报文。
```Jaxb2Marshaller marshaller = new Jaxb2Marshaller();marshaller.setContextPath('com.example.webservice');marshaller.afterPropertiesSet();WebServiceTemplate webServiceTemplate = new WebServiceTemplate(marshaller);String endpointUrl = 'http://localhost:8080/webservice'; webServiceTemplate.setDefaultUri(endpointUrl);ObjectFactory objectFactory = new ObjectFactory();GetBookRequest request =objectFactory.createGetBookRequest();request.setBookId(1);GetBookResponse response = (GetBookResponse) webServiceTemplate.marshalSendAndReceive(request);```3. 发送HTTP请求,获取WebService的响应报文。
webservice面试题Web Service 面试题Web Service 是一种基于网络的应用程序间通信的技术,它使用标准化的 XML 格式来进行数据交换,提供了一种跨平台、跨语言的通信方式。
在企业级应用中,Web Service 是非常重要的一环。
在面试中,面试官可能会问及与 Web Service 相关的问题,以下是一些常见的 Web Service 面试题。
1. 解释什么是 Web Service?Web Service 是一种软件系统,通过网络进行通信和交互。
基于标准化的 XML 协议,Web Service 提供了一种跨平台、跨语言的通信方式。
通过Web Service,应用程序可以以松耦合的方式进行交互和集成,实现系统之间的数据共享和功能共享。
2. Web Service 是如何实现跨平台、跨语言的通信的?Web Service 使用标准的 XML 协议,如 SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery and Integration),来进行数据的封装、描述和发布。
这样,不同平台、不同语言的应用程序都可以通过解析 XML 数据来理解和处理 Web Service 的请求和响应。
3. SOAP 是什么?它在 Web Service 中的作用是什么?SOAP 是一种基于 XML 的通信协议,用于在 Web Service 之间传递消息。
SOAP 将消息封装为 XML 格式,并定义了一些规范和标准,如消息的头部、内容和处理方式等。
SOAP 使得不同平台、不同技术栈的应用程序可以通过解析 XML 来理解和处理消息,实现互通与交互。
4. WSDL 是什么?它在 Web Service 中的作用是什么?WSDL 是一种 XML 格式的文件,用于描述 Web Service 的接口和操作。
用CXF开发RESTful风格WebService目录1RESTful简要介绍 (1)2开发一个普通的接口 (1)2.1定义DTO (1)2.2定义接口 (2)2.3实现类 (2)3开发RESTful风格WebService服务端 (2)3.1定义资源(定义DTO) (2)3.2开发接口 (3)3.3实现类 (4)3.4配置CXF(整合Spring) (4)3.4.1接口的Spring配置文件 (4)3.4.2CXF的Spring配置文件 (4)3.4.3修改web.xml (5)4开发RESTful风格WebService客户端(Java) (5)4.1定义客户端接口 (5)4.2定义实现类 (6)1RESTful简要介绍RESTful风格的WebService之所以当下如此流行,是由于其相对于SOAP风格的WebService 更简洁、更轻量级,REST风格的WebService传输的是JSON或极其简洁的XML,因而其效率和性能都比较理想。
RESTful风格的WebService主张重用HTTP协议,面向资源编程(ROA)。
扼要的说,RESTful 风格WebService中,每一个URL即表示一个资源,比如/employees/1表示id为1的员工。
1.如果对此URL调用HTTP GET方法,则返回员工的XML形式;2.如果对此URL调用HTTP POST/PUT方法,则可以新增或者修改此员工;3.如果对此URL调用HTTP DELETE方法,则可以删除此员工;因此,我们在设计一个RESTful风格的接口时,一定要拥有面向资源设计的考量!此外,在实现接口的过程中,要遵循RESTful风格的几个特性,他们分别是:1.无状态性:HTTP本身即是无状态协议,因此RESTful天然的具备无状态性,具备优良的水平扩展能力!2.幂等性:GET/PUT/DELETE方法具备此特性,幂等性可概述为无论重复调用多少次,其结果都一致!POST例外,不过设计的时候也可以按照此特性设计!3.唯一性:即URL地址要唯一的表示一个资源!关于事务、安全等更多的高级特性这里不阐述,有兴趣的可参考《Restful Web Service中文版》一书。
webservice_rest接⼝_学习笔记1、声明WebClientUtil⼯具类public class WebClientUtil {public static String doPost(String url,Map<String, Object> params,String token,String contentType,int connectTimeout,int readTimeout,String dataType) throws Exception{System.out.println("调⽤:-" + url + "接⼝,参数列表:-" + params);String parameterData = null;OutputStream outputStream = null;OutputStreamWriter outputStreamWriter = null;InputStream inputStream = null;InputStreamReader inputStreamReader = null;BufferedReader reader = null;StringBuffer resultBuffer = new StringBuffer();String tempLine = null;if (params != null){parameterData = "";if("json".equals(dataType)){parameterData = JSON.toJSONString(params);}else{for (String key : params.keySet()) {parameterData = parameterData + (parameterData.equals("") ? "" : "&") + key + "=" + URLEncoder.encode(String.valueOf(params.get(key)), "UTF8"); }}}HttpURLConnection httpURLConnection = getHttpURLConn(url, parameterData,"POST",token,contentType,connectTimeout,readTimeout);if (parameterData != null){outputStream = httpURLConnection.getOutputStream();outputStreamWriter = new OutputStreamWriter(outputStream);outputStreamWriter.write(parameterData.toString());outputStreamWriter.flush();}inputStream = httpURLConnection.getInputStream();inputStreamReader = new InputStreamReader(inputStream);reader = new BufferedReader(inputStreamReader);while ((tempLine = reader.readLine()) != null) {resultBuffer.append(tempLine);}closeStream(outputStream,outputStreamWriter,inputStream,inputStreamReader,reader);return resultBuffer.toString();}public static String doGet(String url, Map<String, Object> params,String token,String contentType,int connectTimeout,int readTimeout,String dataType) throws Exception{System.out.println("调⽤:-" + url + "接⼝,参数列表:-" + params);String parameterData = null;OutputStream outputStream = null;OutputStreamWriter outputStreamWriter = null;InputStream inputStream = null;InputStreamReader inputStreamReader = null;BufferedReader reader = null;StringBuffer resultBuffer = new StringBuffer();String tempLine = null;if (params != null){parameterData = "";if("json".equals(dataType)){parameterData = JSON.toJSONString(params);}else{for (String key : params.keySet()) {parameterData = parameterData + (parameterData.equals("") ? "" : "&") + key + "=" + URLEncoder.encode(String.valueOf(params.get(key)), "UTF8"); }}}HttpURLConnection httpURLConnection = getHttpURLConn(url,parameterData, "GET",token,contentType,connectTimeout,readTimeout); inputStream = httpURLConnection.getInputStream();inputStreamReader = new InputStreamReader(inputStream);}closeStream(outputStream, outputStreamWriter, inputStream, inputStreamReader, reader);return resultBuffer.toString();}private static HttpURLConnection getHttpURLConn(String url, String parameterData,String mode,String token,String contentType,int connectTimeout,int readTimeout)throws MalformedURLException, IOException, ProtocolException{URL localURL = new URL(url);if("GET".equals(mode)){localURL = new URL(url+"?"+parameterData);}URLConnection connection = localURL.openConnection();HttpURLConnection httpURLConnection = (HttpURLConnection)connection;httpURLConnection.setDoOutput(true);if(connectTimeout > 0){httpURLConnection.setConnectTimeout(connectTimeout);//设置连接超时}if(readTimeout > 0){httpURLConnection.setReadTimeout(readTimeout);//设置读取超时}httpURLConnection.setRequestMethod(mode);httpURLConnection.setRequestProperty("Accept","*");httpURLConnection.setRequestProperty("connection","Keep-Alive");httpURLConnection.setRequestProperty("Accept-Charset","utf-8");if(StrUtil.isNotNull(contentType)){httpURLConnection.setRequestProperty("Content-Type",contentType);}else{httpURLConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");}if(StrUtil.isNotNull(token) && !"null".equals(token)){httpURLConnection.setRequestProperty("Authorization","Bearer "+token);}httpURLConnection.setRequestProperty("Content-Length",String.valueOf(parameterData == null ? 0 : parameterData.length()));//设置是否从httpUrlConnection读⼊,默认情况下是true;httpURLConnection.setDoInput(true);//Post 请求不能使⽤缓存httpURLConnection.setUseCaches(false);return httpURLConnection;}private static void closeStream(OutputStream outputStream, OutputStreamWriter outputStreamWriter, InputStream inputStream, InputStreamReader inputStreamReader, BufferedReader reader){if (outputStreamWriter != null) {try{outputStreamWriter.close();}catch (IOException e){e.printStackTrace();}}if (outputStream != null) {try{outputStream.close();}catch (IOException e){e.printStackTrace();}}if (reader != null) {try{reader.close();}catch (IOException e){e.printStackTrace();if (inputStreamReader != null) {try{inputStreamReader.close();}catch (IOException e){e.printStackTrace();}}if (inputStream != null) {try{inputStream.close();}catch (IOException e){e.printStackTrace();}}}public static void main(String[] args) throws Exception{String url = "http://127.0.0.1:8080/rdpe-shanxi/rest/commonApiRestful.action";Map<String,Object> params = new HashMap<String,Object>();Map<String,Object> sss = new HashMap<String,Object>();Map<String,Object> bbb = new HashMap<String,Object>();bbb.put("identitycard","BMP20190515170343351");sss.put("action", "txMktSmsSend");sss.put("params",JSON.toJSONString(bbb));params.put("jsonStr",JSON.toJSONString(sss));System.out.println(WebClientUtil.doPost(url,params,"","",3000,3000,""));}public static String invokeQueryByBcapOpen(String requesturl,Map<String,Object> params,String requestmode,String contentType,String token,String dataType,int connectTimeout,int readTimeout) throws Exception {String resultJson="";if("GET".equals(requestmode)){resultJson = WebClientUtil.doGet(requesturl, params, token, contentType, connectTimeout, readTimeout, dataType);}else if("POST".equals(requestmode)){resultJson = WebClientUtil.doPost(requesturl, params, token, contentType, connectTimeout, readTimeout, dataType);}return resultJson;}2、声明接⼝调⽤类package com.bonc.business.restful;import ng.reflect.Method;import java.util.HashMap;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.fastjson.JSON;import com.bonc.business.db.F;import com.bonc.business.db.TxException;import com.bonc.business.entity.SysParam;import com.bonc.business.tools.ConfigUtil;import com.bonc.business.tools.Encypt;import com.bonc.business.tools.JsonBody;import com.bonc.business.tools.ParamVo;import com.bonc.business.tools.httpclient.WebClientUtil;* Function: 统⼀对外服务RestFul 接⼝. <br/>*/@CrossOrigin@Controller@RequestMapping(value = "/rest")public class CommonApiRestFul {private static final boolean encyptbase64=Boolean.parseBoolean(ConfigUtil.getInstance().getValueByProperty(F.CfgFile, "encyptbase64")); private static final String url = ConfigUtil.getInstance().getValueByProperty(F.CfgFile, "market_helper.url");private static final String requestmode=ConfigUtil.getInstance().getValueByProperty(F.CfgFile, "market_helper.requestmode");private static final String contentType=ConfigUtil.getInstance().getValueByProperty(F.CfgFile, "market_helper.contentType");private static final String token="";private static final String dataType="json";private static final int connectTimeout=30000;private static final int readTimeout=30000;@ResponseBody@RequestMapping(value = "/commonApiRestful.action", method = RequestMethod.POST, produces = CST.PRODUCES_JSON)public Object commonApiRestful(HttpServletRequest request,String jsonStr,HttpServletResponse response) {response.setHeader("Access-Control-Allow-Origin", "*");System.out.println(jsonStr);Map<String,Object> params = new HashMap<String,Object>();params.put("jsonStr",jsonStr);WebClientUtil wc = new WebClientUtil();String resultJsonStr = "";try {resultJsonStr = wc.invokeQueryByBcapOpen(url, params, requestmode, contentType, token, dataType, connectTimeout, readTimeout);} catch (Exception e) {e.printStackTrace();String code = CST.RES_EXCEPTION;String msg = "调⽤接⼝执⾏出错!"+e.getMessage();resultJsonStr = Ajax.responseString(code,msg,"",null);if(encyptbase64){resultJsonStr = Encypt.setEncString(resultJsonStr);}}return resultJsonStr;}}package com.bonc.business.restful;import ng.reflect.Method;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ng.StringUtils;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.ResponseBody;import com.alibaba.fastjson.JSON;import com.bonc.business.db.F;import com.bonc.business.db.TxException;import com.bonc.business.entity.SysParam;import com.bonc.business.tools.ConfigUtil;import com.bonc.business.tools.Encypt;import com.bonc.business.tools.JsonBody;import com.bonc.business.tools.ParamVo;* Function: 统⼀对外服务RestFul 接⼝. <br/>*/@CrossOrigin@Controller@RequestMapping(value = "/rest")public class CommonApiRestFul2 {/* @Resourceprivate SystemConfigService systemConfigService;@Resourceprivate BaseInterfaceLogService baseInterfaceLogService;@Resourceprivate ExecutorAsynTaskService executorAsynTaskService;*///是否开启传输数据过程中数据加密解密private static final boolean encyptbase64=Boolean.parseBoolean(ConfigUtil.getInstance().getValueByProperty(F.CfgFile, "encyptbase64")); //private static final boolean encyptbase64=false;@ResponseBody@RequestMapping(value = "/commonApiRestful2.action", method = RequestMethod.POST, produces = CST.PRODUCES_JSON)public Object commonApiRestful2(HttpServletRequest request,@RequestBody String jsonStr,HttpServletResponse response) { response.setHeader("Access-Control-Allow-Origin", "*");// JsonBody res = new JsonBody();String resultJsonStr="";String code=CST.RES_SECCESS;String msg="调⽤接⼝执⾏成功";Object obj=null;String interfacelogid = "";String resmethod = "";String resparams = "";String createStaff = "";System.out.println(jsonStr);boolean flag = true;try {if(StringUtils.isBlank(jsonStr)){code = CST.RES_EXCEPTION;msg = "不得传⼊空值参数jsonStr";flag = false;}if(flag){//将json参数转换成mapMap<String, Object> requestform = JSON.parseObject(jsonStr, Map.class);if(encyptbase64){jsonStr = Encypt.setDesString(requestform.get("jsonStr")+"");}else{jsonStr = requestform.get("jsonStr")+"";}Map<String, Object> form = JSON.parseObject(jsonStr, Map.class);if(form.containsKey("action")){if(StringUtils.isBlank(form.get("action")+"")){code = CST.RES_EXCEPTION;msg = "接⼝的action参数不能为空";flag = false;}}else{code = CST.RES_EXCEPTION;msg = "传输的json格式参数⽆效,没有action";flag = false;}if(form.containsKey("params")){if(StringUtils.isBlank(form.get("params")+"")){code = CST.RES_EXCEPTION;msg = "接⼝的params参数不能为空";flag = false;}}else{code = CST.RES_EXCEPTION;msg = "传输的json格式参数⽆效,没有params";if(flag){resmethod = (String) form.get("action");resparams = form.containsKey("params")?form.get("params").toString():"";ParamVo vo = new ParamVo();vo.put("paramCode","interfaceconfig");vo.put("paramKey",form.get("action"));//SysParam sysParam = this.systemConfigService.getSysParaByUnionKey(vo);Object result = null;if(true){//校验传参是否有效//Map<String, Object> params = JSON.parseObject(form.get("params")+"", Map.class);/*if(params.containsKey("createStaff") || params.containsKey("userId") || params.containsKey("staffId")){if(StringUtils.isNotBlank(params.get("createStaff")+"")){createStaff = (String) params.get("createStaff");}else if(StringUtils.isNotBlank(params.get("userId")+"")){createStaff = (String) params.get("userId");}else if(StringUtils.isNotBlank(params.get("staffId")+"")){createStaff = (String) params.get("staffId");}}JsonBody check = new JsonBody(params);if(!check.isValid(sysParam.getParamExt1(),"{\"alias\":\"1\"}")){code = CST.RES_EXCEPTION;msg = (String) check.get("_invalidMessage");flag = false;}*/if(flag){//定义的service层处理⽅法类路径://com.bonc.rdpe.service.BusiProcessMonitorService.getBusiProcessMonitorByParamsString paramValue = "com.bonc.business.service.services.TriggerRestfulService.getTriggerInfoList";String[] splitstrs = paramValue.split("\\.");String beanName = splitstrs[splitstrs.length-2];Object service = CrontabTask.getBean(beanName.substring(0, 1).toLowerCase()+beanName.substring(1, beanName.length()));vo = new ParamVo();vo.setParam(JSON.parseObject(form.get("params")+"",Map.class));Class serviceBean = Class.forName(paramValue.substring(0,stIndexOf(".")));Method m =serviceBean.getMethod(paramValue.substring(stIndexOf(".")+1,paramValue.length()),Class.forName("com.bonc.business.tools.ParamVo")); result = m.invoke(service,vo);try{Map<String,Object> resMap = (Map<String, Object>) result;code = (String) resMap.get("code");msg = (String) resMap.get("msg");obj = resMap.get("data");}catch(Exception ex){obj = result;}}}else{code = CST.RES_EXCEPTION;msg = "⽆此服务接⼝,请联系接⼝提供⽅解决!";}}}} catch (Exception e) {e.printStackTrace();code = CST.RES_EXCEPTION;msg = e.getMessage();if(e.getMessage().indexOf("syntax error")!=-1){msg = "传输的参数不是约定的有效的json格式字符串,请检查json字符串是否包含action和params!";}else{msg += "调⽤接⼝执⾏出错!";}}//插⼊接⼝调⽤⽇志信息} catch (TxException e) {e.printStackTrace();}*/resultJsonStr = Ajax.responseString(code,msg,interfacelogid,obj);if(encyptbase64){resultJsonStr = Encypt.setEncString(resultJsonStr);}return resultJsonStr;}}3、postman检测接⼝是否可以正常调⽤http://127.0.0.1:8080/rdpe-shanxi/rest/commonApiRestful.action?jsonStr={ "action": "txMktSmsSend","params": {"pageNo" : 3,"busiCode" : "","triggerCount" : "","eventType" : ""}}。
restful使用方法RESTful是一种基于HTTP协议的Web服务架构风格,它强调使用HTTP协议的GET、POST、PUT、DELETE等方法来实现资源的增删改查。
下面介绍RESTful的使用方法。
1. 定义资源在RESTful中,资源是指需要被访问的对象,可以是一篇文章、一张图片、一个用户等等。
首先需要定义资源的URI(Uniform Resource Identifier),即资源的唯一标识符。
例如,文章资源可以定义为/articles/{id},其中{id}是文章的唯一标识符。
2. 使用HTTP方法RESTful使用HTTP协议的GET、POST、PUT、DELETE等方法来实现资源的增删改查。
具体使用方法如下:- GET:用于获取资源,例如获取一篇文章的信息,可以使用GET方法访问/articles/{id}。
- POST:用于创建资源,例如创建一篇文章,可以使用POST方法访问/articles/,并在请求体中传递文章的信息。
- PUT:用于更新资源,例如更新一篇文章的信息,可以使用PUT方法访问/articles/{id},并在请求体中传递更新后的文章信息。
- DELETE:用于删除资源,例如删除一篇文章,可以使用DELETE方法访问/articles/{id}。
3. 使用HTTP状态码RESTful使用HTTP状态码来表示请求的结果。
常见的状态码如下:- 200 OK:表示请求成功。
- 201 Created:表示资源创建成功。
- 204 No Content:表示请求成功,但没有返回任何内容。
- 400 Bad Request:表示请求参数有误。
- 401 Unauthorized:表示未授权访问。
- 404 Not Found:表示请求的资源不存在。
- 500 Internal Server Error:表示服务器内部错误。
4. 使用JSON格式RESTful通常使用JSON格式来传递数据。
activiti配置调用业务方法Activiti是一款流程引擎,可作为业务流程处理的一部分。
Activiti不仅可在流程定义中配置业务逻辑,还可调用外部的业务服务。
在Activiti中配置业务方法的核心概念是Delegate和ServiceTask。
Delegate 是Java类,它实现了执行特定任务的接口。
ServiceTask是Activiti流程定义中的一种元素,它指定了要执行的任务,包括要调用哪个Delegate类。
有两种方法可以在Activiti中配置业务方法:手动编写Delegate类或使用工具生成代理类。
1. 手动编写Delegate类实现Delegate接口的最简单方法是创建一个类,扩展org.activiti.engine.delegate.JavaDelegate接口。
JavaDelegate有一个execu()方法,可以在此方法中执行必要的逻辑。
下面的例子演示了如何实现JavaDelegate接口。
public class MyDelegate implements JavaDelegate {public void execute(DelegateExecution execution) throws Exception {System.out.println("Testing delegate for Activiti!");}}要在Activiti的流程定义中使用此Delegate类,需要添加一个Service Task元素。
Service Task元素定义了要执行的任务以及要使用的Delegate类。
下面的例子演示了如何在流程定义中配置ServiceTask元素。
<serviceTask id="serviceTask1" name="Service Task"activiti:class="com.activiti.MyDelegate"></serviceTask>上面的流程定义演示了如何使用MyDelegate类在Service Task中配置activiti:class属性。