锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

外围系统调用SAP的WebAPI接口

时间:2022-12-21 19:30:00 jss48a一2z继电器

提示:文章完成后,目录可以自动生成,如何生成可以参考右边的帮助文档

文章目录

  • 前言
  • 一、WebAPI 和 WebService有什么区别?
  • 二、使用步骤
    • 1.C#调用SAP的WebAPI接口
    • 2.Python调用SAP的WebAPI接口
    • 3.Java调用SAP的WebAPI接口
  • 总结


前言

提示:此处可添加本文要记录的一般内容:

公司要换新的SAP,之前调用SAP所有通过WebService现在新的方式SAP需要换成WebAPI接口


提示:以下是本文的文本内容,以下案例可供参考

一、WebAPI 和 WebService有什么区别?

WebAPI :

  1. 无状态、开源、部署IIS在应用程序上
  2. 基于HTTP协议,数据格式为纯文本,Response可以被Web API的MediaTypeFormatter常用于任何格式的转换Json格式
  3. 基于HTTP构建轻量级框架。非常适合移动客户端服务
  4. api类似于cs根据开发人员定义架构、协议和端口。 客户端需要同时开发API服务器端程序

WebService :

  1. 有状态,不开源,只能部署在IIS上
  2. 基于Soap只支持协议HTTP协议,数据格式为XML,
  3. 类似于bs架构,只需要开发服务器端,不需要开发客户端,客户端只需要遵循soap协议,可调用

所有的WebService都是WebAPI,但所有的WebAPI并不是WebService。Web API客户端系统(调用者)和服务系统(提供者)相互独立,调用者可以轻松使用不同的语言(Java,Python,Ruby等)进行API的调用。Web Service几乎总是依赖于两个系统之间的交互XML-RPC接口相互通信,不同客户端下的浏览器对XML分析方法不一致,需要重复编写许多代码
。Web Service更适合为端到端场景提供服务,Web API更适合为应用场景提供服务。可以在网上查看。

二、使用步骤

1.C#调用SAP的WebAPI接口

Get提交代码如下(示例):

string result = string.Empty; var client = new HttpClient(); var strPostUrl = "http://***.**.*.***:8000/sap/bc/rest/z_pda_cbzx_srv?sap-client=300&sap-language=ZH&bukrs=1040"; using (HttpResponseMessage responseMessage = client.Get(strPostUrl)) { 
                responseMessage.EnsureStatusIsSuccessful();        result = responseMessage.Content.ReadAsString(); } Response.Write(result); 

Post提交代码如下(示例):

string result = string.Empty; var client = new HttpClient();  var credentials = username   ":"   password; var base64Credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(credentials)); client.DefaultHeaders.Add("Authorization", "Basic " + base64Credentials); var strPostUrl = "http://***.**.*.***:8000/sap/bc/rest/z_conftab_srv?sap-client=300&sap-language=ZH"; var postData = new { 
          action_id = "U", stage = "PLATING", work_step = "PL04-RPXXXXX", seg_attr = "BP" }; System.Web.Script.Serialization.JavaScriptSerializer jss = new JavaScriptSerializer(); HttpContent content = HttpContent.Create(Encoding.UTF8.GetBytes("["+jss.Serialize(postData)+"]"), "application/json"); using (HttpResponseMessage responseMessage = client.Post(strPostUrl, content)) { 
          responseMessage.EnsureStatusIsSuccessful(); result = responseMessage.Content.ReadAsString(); } Response.Write(result); 

2.Python调用SAP的WebAPI接口

Get提交代码如下(示例):

url='http://***.**.*.***:8000/sap/bc/rest/z_pda_cbzx_srv?sap-client=300&sap-language=ZH&bukrs=1040'#存储API调用的URL
r=requests.get(url) #获得URL对象
print("Status code:",r.status_code) #判断请求是否成功(状态码200时表示请求成功)
if r.status_code == 200:
    response_dict = r.json()  # API返回json格式的信息(将响应存储到变量中)\
    print(response_dict)
else:
    print("调用 web-api 异常")

POST提交代码如下(示例):

credentials = username + ":" + password
auth = str(base64.b64encode(credentials.encode('utf-8')), 'utf-8')
headers = { 
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0', "Content-Type": "application/json", 'Authorization': f'Basic {auth}'}
url_json = 'http://***.**.*.***:8000/sap/bc/rest/z_conftab_srv?sap-client=300&sap-language=ZH'
data_json = json.dumps({ 
        'action_id':'U','stage':'PLATING','work_step':'PL04-RPXXXXX','seg_attr':'BP'})  # dumps:将python对象解码为json数据
print("["+data_json+"]")
r_json = requests.post(url_json, "["+data_json+"]", headers=headers)
print("Status code:",r_json.status_code)
print(r_json)
print(r_json.text)
print(r_json.content)

3.Java调用SAP的WebAPI接口

Get提交代码如下(示例):


CloseableHttpClient client = HttpClients.createDefault();
 
URIBuilder uriBuilder = new URIBuilder("http://***.**.*.***:8000/sap/bc/rest/z_pda_cbzx_srv?sap-client=300&sap-language=ZH&bukrs=1040");

//创建httpGet远程连接实例,这里传入目标的网络地址
HttpGet httpGet = new HttpGet(uriBuilder.build());
// 设置请求头信息,鉴权(没有可忽略)
//httpGet.setHeader("Authorization", "Bearer da3efcbf-0845-4fe3-8aba-ee040be542c0");
// 设置配置请求参数(没有可忽略)
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 连接主机服务超时时间
                .setConnectionRequestTimeout(35000)// 请求超时时间
                .setSocketTimeout(60000)// 数据读取超时时间
                .build();
// 为httpGet实例设置配置
httpGet.setConfig(requestConfig);
//执行请求
CloseableHttpResponse response = client.execute(httpGet);
//获取Response状态码
int statusCode = response.getStatusLine().getStatusCode();
System.out.println(statusCode);
//获取响应实体, 响应内容
HttpEntity entity = response.getEntity();
//通过EntityUtils中的toString方法将结果转换为字符串
String str = EntityUtils.toString(entity);
System.out.println(str);
response.close();
client.close();

Post提交代码如下(示例):

HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
// 创建httpPost远程连接实例
HttpPost post = new HttpPost("http://***.**.*.***:8000/sap/bc/rest/z_conftab_srv?sap-client=300&sap-language=ZH");

String credentials = userName + ":" + password;
String encoding = DatatypeConverter.printBase64Binary(credentials.getBytes("utf-8"));  //username password 自行修改 中间":"不可少
post.setHeader("Authorization", "Basic " + encoding);
String result = "";
try (CloseableHttpClient closeableHttpClient = httpClientBuilder.build()) { 
        
      String jsonPrarms = "{\"action_id\":\"U\",\"stage\":\"PLATING\",\"work_step\":\"PL04-RPXXXXX\",\"seg_attr\":\"BP\"}";
      System.out.println("["+jsonPrarms.toString()+"]");
      HttpEntity entityParam  = new StringEntity("["+jsonPrarms.toString()+"]", "UTF-8");
      post.setEntity(entityParam);
      post.setHeader("Content-type", "application/json");
      HttpResponse resp = closeableHttpClient.execute(post);
      StatusLine statusLine = resp.getStatusLine();   //获取请求对象中的响应行对象
      int responseCode = statusLine.getStatusCode();
      if (responseCode == 200) { 
        
         //获取响应信息
         HttpEntity entity = resp.getEntity();
         InputStream input = entity.getContent();
         BufferedReader br = new BufferedReader(new InputStreamReader(input,"utf-8"));
         String str1 = br.readLine();
         System.out.println("服务器的响应是:" + str1);
         br.close();
         input.close();
       } else { 
        
              System.out.println("响应失败");
       }
} catch (IOException e) { 
        
      e.printStackTrace();
}

总结

记录点点滴滴

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章