Java调用Restful API接口的几种方式–HTTPS

简介: 最近有一个需求,为客户提供一些Restful API接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful API接口,由于使用的是HTTPS,所以还要考虑到对于HTTPS的处理。

最近有一个需求,为客户提供一些Restful API接口,QA使用postman进行测试,但是postman的测试接口与java调用的相似但并不相同,于是想自己写一个程序去测试Restful API接口,由于使用的是HTTPS,所以还要考虑到对于HTTPS的处理。由于我也是首次使用的Java调用REST风格的接口,所以还要研究一番,自然也是查阅了一些资料。

分析:这个问题与模块之间的调用不同,比如我有两个模块前端和后端,前端提供前台展示,后端提供数据支持。之前使用过Hession去把后端提供的服务注册成远程服务,在前端可以通过这种远程服务直接调到后端的接口。但这对于一个公司自己的一个项目耦合性比较高的情况下使用,没有问题。但是如果给客户注册这种远程服务,似乎不太好,耦合性太高。所以就考虑用一下方式进行处理。

一,HttpClient的

HttpClient的大家也许比较熟悉但又比较陌生,熟悉是知道他可以远程调用比如请求一个URL,然后在响应里获取到返回状态和返回信息,但是今天讲的稍微复杂一点,因为今天的主题是HTTPS,这个牵涉到证书或用户认证的问题。

确定使用的HttpClient之后,查询相关资料,发现的HttpClient的新版本与老版本不同,随然兼容老版本,但已经不提倡老版本是使用方式,很多都已经标记为过时的方法或类。今天就分别使用老版本4.2和最新版本4.5.3来写代码。

老版本4.2

需要认证

在准备证书阶段选择的是使用证书认证

  1.  com.darren.test.https.v42;
  2. import  java.io.File;
  3. import  java.io.FileInputStream;
  4. import  java.security.KeyStore;
  5. import  org.apache.http.conn.ssl.SSLSocketFactory;
  6. 公共 HTTPSCertifiedClient  扩展 HTTPSClient {
  7.     public  HTTPSCertifiedClient(){
  8.     }
  9.     @覆盖
  10.     公共无效 prepareCertificate()  抛出 异常{
  11.         //获得密匙库
  12.         KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
  13.         FileInputStream instream =  new  FileInputStream(
  14.                  文件(“C:/Users/zhda6001/Downloads/software/xxx.keystore” ));
  15.         // FileInputStream instream = new FileInputStream(new File(“C:/Users/zhda6001/Downloads/xxx.keystore”));
  16.         //密匙库的密码
  17.         trustStore.load(instream,  “password” .toCharArray());
  18.         //注册密匙库
  19.         this .socketFactory =  new  SSLSocketFactory(trustStore);
  20.         //不校验域名
  21.         socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  22.     }
  23. }

跳过认证

在准备证书阶段选择的是跳过认证

  1.  com.darren.test.https.v42;
  2. import  java.security.cert.CertificateException;
  3. import  java.security.cert.X509Certificate;
  4. import  javax.net.ssl.SSLContext;
  5. import  javax.net.ssl.TrustManager;
  6. import  javax.net.ssl.X509TrustManager;
  7. import  org.apache.http.conn.ssl.SSLSocketFactory;
  8. 公共 HTTPSTrustClient  扩展 HTTPSClient {
  9.     public  HTTPSTrustClient(){
  10.     }
  11.     @覆盖
  12.     公共无效 prepareCertificate()  抛出 异常{
  13.         //跳过证书验证
  14.         SSLContext ctx = SSLContext.getInstance(“TLS” );
  15.         X509TrustManager tm =  new  X509TrustManager(){
  16.             @覆盖
  17.             公共无效 checkClientTrusted(X509Certificate []链,字符串authType)  抛出 CertificateException {
  18.             }
  19.             @覆盖
  20.             公共无效 checkServerTrusted(X509Certificate []链,字符串authType)  抛出 CertificateException {
  21.             }
  22.             @覆盖
  23.             public  X509Certificate [] getAcceptedIssuers(){
  24.                 返回null ;
  25.             }
  26.         };
  27.         //设置成已信任的证书
  28.         ctx.init(null ,  new  TrustManager [] {tm},  null );
  29.         //穿件SSL socket工厂,并且设置不检查主机名称
  30.         this .socketFactory =  new  SSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  31.     }
  32. }

总结

现在发现这两个类都继承了同一个类HTTPSClient,并且HTTPSClient继承了DefaultHttpClient类,可以发现,这里使用了模板方法模式。

  1.  com.darren.test.https.v42;
  2. 导入 org.apache.http.conn.ClientConnectionManager;
  3. import  org.apache.http.conn.scheme.Scheme;
  4. import  org.apache.http.conn.scheme.SchemeRegistry;
  5. import  org.apache.http.conn.ssl.SSLSocketFactory;
  6. import  org.apache.http.impl.client.DefaultHttpClient;
  7. 公共抽象 HTTPSClient  扩展 DefaultHttpClient {
  8.     受保护的 SSLSocketFactory socketFactory;
  9.     / **
  10.      *初始化HTTPSClient
  11.      * 
  12.      * @return返回当前实例
  13.      * @例外
  14.      * /
  15.     公共 HTTPSClient init()  抛出 异常{
  16.         这个.prepareCertificate();
  17.         这个.regist();
  18.         返回这个;
  19.     }
  20.     / **
  21.      *准备证书验证
  22.      * 
  23.      * @例外
  24.      * /
  25.     public abstract void  prepareCertificate()  throws  Exception;
  26.     / **
  27.      *注册协议和端口,此方法也可以被子类重写
  28.      * /
  29.     保护无效的 注册表(){
  30.         ClientConnectionManager ccm =  this .getConnectionManager();
  31.         SchemeRegistry sr = ccm.getSchemeRegistry();
  32.         sr.register(new  Scheme(“https” ,  443 ,socketFactory));
  33.     }
  34. }

下边是工具类

  1.  com.darren.test.https.v42;
  2. import  java.util.ArrayList;
  3. import  java.util.List;
  4. import  java.util.Map;
  5. import  java.util.Set;
  6. 导入 org.apache.http.HttpEntity;
  7. 导入 org.apache.http.HttpResponse;
  8. import  org.apache.http.NameValuePair;
  9. import  org.apache.http.client.entity.UrlEncodedFormEntity;
  10. import  org.apache.http.client.methods.HttpGet;
  11. import  org.apache.http.client.methods.HttpPost;
  12. import  org.apache.http.client.methods.HttpRequestBase;
  13. import  org.apache.http.message.BasicNameValuePair;
  14. import  org.apache.http.util.EntityUtils;
  15. 公共 HTTPSClientUtil {
  16.     private static final  String DEFAULT_CHARSET =  “UTF-8” ;
  17.     public static  String doPost(HTTPSClient httpsClient,String url,Map <String,String> paramHeader,
  18.             Map <String,String> paramBody)  throws  Exception {
  19.         返回 doPost(httpsClient,url,paramHeader,paramBody,DEFAULT_CHARSET);
  20.     }
  21.     public static  String doPost(HTTPSClient httpsClient,String url,Map <String,String> paramHeader,
  22.             Map <String,String> paramBody,String charset)  throws  Exception {
  23.         String result =  null ;
  24.         HttpPost httpPost =  new  HttpPost(url);
  25.         setHeader(httpPost,paramHeader);
  26.         setBody(httpPost,paramBody,charset);
  27.         HttpResponse响应= httpsClient.execute(httpPost);
  28.         if  (response!=  null ){
  29.             HttpEntity resEntity = response.getEntity();
  30.             if  (resEntity!=  null ){
  31.                 结果= EntityUtils.toString(resEntity,字符集);
  32.             }
  33.         }
  34.         返回 结果;
  35.     }
  36.     public static  String doGet(HTTPSClient httpsClient,String url,Map <String,String> paramHeader,
  37.             Map <String,String> paramBody)  throws  Exception {
  38.         返回 doGet(httpsClient,url,paramHeader,paramBody,DEFAULT_CHARSET);
  39.     }
  40.     public static  String doGet(HTTPSClient httpsClient,String url,Map <String,String> paramHeader,
  41.             Map <String,String> paramBody,String charset)  throws  Exception {
  42.         String result =  null ;
  43.         HttpGet httpGet =  new  HttpGet(url);
  44.         setHeader(httpGet,paramHeader);
  45.         HttpResponse响应= httpsClient.execute(httpGet);
  46.         if  (response!=  null ){
  47.             HttpEntity resEntity = response.getEntity();
  48.             if  (resEntity!=  null ){
  49.                 结果= EntityUtils.toString(resEntity,字符集);
  50.             }
  51.         }
  52.         返回 结果;
  53.     }
  54.     private static void  setHeader(HttpRequestBase request,Map <String,String> paramHeader){
  55.         //设置标题
  56.         if  (paramHeader!=  null ){
  57.             设置<String> keySet = paramHeader.keySet();
  58.             for  (String key:keySet){
  59.                 request.addHeader(key,paramHeader.get(key));
  60.             }
  61.         }
  62.     }
  63.     private static void  setBody(HttpPost httpPost,Map <String,String> paramBody,String charset)  throws  Exception {
  64.         //设置参数
  65.         if  (paramBody!=  null ){
  66.             List <NameValuePair> list =  new  ArrayList <NameValuePair>();
  67.             设置<String> keySet = paramBody.keySet();
  68.             for  (String key:keySet){
  69.                 list.add(new  BasicNameValuePair(key,paramBody.get(key)));
  70.             }
  71.             if  (list.size()>  ){
  72.                 UrlEncodedFormEntity entity =  new  UrlEncodedFormEntity(list,charset);
  73.                 httpPost.setEntity(实体);
  74.             }
  75.         }
  76.     }
  77. }

然后是测试类:

  1.  com.darren.test.https.v42;
  2. import  java.util.HashMap;
  3. import  java.util.Map;
  4. 公共 HTTPSClientTest {
  5.     公共静态无效的 主要(字符串[]参数)  抛出 异常{
  6.         HTTPSClient httpsClient =  null ;
  7.         httpsClient =  new  HTTPSTrustClient()。init();
  8.         // httpsClient = new HTTPSCertifiedClient()。init();
  9.         String url =  “https://1.2.6.2:8011/xxx/api/getToken” ;
  10.         // String url =“https://1.2.6.2:8011/xxx/api/getHealth”;
  11.         Map <String,String> paramHeader =  new  HashMap <>();
  12.         //paramHeader.put(“Content-Type“,”application / json“);
  13.         paramHeader.put(“Accept” ,  “application / xml” );
  14.         Map <String,String> paramBody =  new  HashMap <>();
  15.         paramBody.put(“client_id” ,  “ankur.tandon.ap@xxx.com” );
  16.         paramBody.put(“client_secret” ,  “P @ ssword_1” );
  17.         String result = HTTPSClientUtil.doPost(httpsClient,url,paramHeader,paramBody);
  18.         // String result = HTTPSClientUtil.doGet(httpsClient,url,null,null);
  19.         的System.out.println(结果);
  20.     }
  21.  }

返回信息:

  1. <?xml version “1.0” encoding “utf-8” ?>
  2. 令牌jkf8RL0sw + Skkflj8RbKI5hP1bEQK8PrCuTZPpBINqMYKRMxY1kWCjmCfT191Zpp88VV1aGHW8oYNWjEYS0axpLuGAX89ejCoWNbikCc1UvfyesXHLktcJqyUFiVjevhrEQxJPHncLQYWP + Xse5oD9X8vKFKk7InNTMRzQK7YBTZ / e3U7gswM / 5cvAHFl6o9rEq9cWPXavZNohyvnXsohSzDo + BXAtXxa1xpEDLy / 8小时/ UaP4n4dlZDJJ3B8t1Xh + CRRIoMOPxf7c5wKhHtOkEOeXW + xoPQKKSx5CKWwJpPuGIIFWF / PaqWg + JUOsVT7QGdPv8PMWJ9DwEwjTdxguDg == </ 令牌>

新版本4.5.3

需要认证

  1.  com.darren.test.https.v45;
  2. import  java.io.File;
  3. import  java.io.FileInputStream;
  4. import  java.security.KeyStore;
  5. import  javax.net.ssl.SSLContext;
  6. import  org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  7. import  org.apache.http.conn.ssl.TrustSelfSignedStrategy;
  8. import  org.apache.http.ssl.SSLContexts;
  9. 公共 HTTPSCertifiedClient  扩展 HTTPSClient {
  10.     public  HTTPSCertifiedClient(){
  11.     }
  12.     @覆盖
  13.     公共无效 prepareCertificate()  抛出 异常{
  14.         //获得密匙库
  15.         KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
  16.         FileInputStream instream =  new  FileInputStream(
  17.                  文件(“C:/Users/zhda6001/Downloads/software/xxx.keystore” ));
  18.         // FileInputStream instream = new FileInputStream(new File(“C:/Users/zhda6001/Downloads/xxx.keystore”));
  19.         尝试 {
  20.             //密匙库的密码
  21.             trustStore.load(instream,  “password” .toCharArray());
  22.         }  最后 {
  23.             instream.close();
  24.         }
  25.         SSLContext sslcontext = SSLContexts.custom()。loadTrustMaterial(trustStore,TrustSelfSignedStrategy.INSTANCE)
  26.                 。建立();
  27.         this .connectionSocketFactory =  new  SSLConnectionSocketFactory(sslcontext);
  28.     }
  29. }

跳过认证

  1.  com.darren.test.https.v45;
  2. import  java.security.cert.CertificateException;
  3. import  java.security.cert.X509Certificate;
  4. import  javax.net.ssl.SSLContext;
  5. import  javax.net.ssl.TrustManager;
  6. import  javax.net.ssl.X509TrustManager;
  7. import  org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  8. 公共 HTTPSTrustClient  扩展 HTTPSClient {
  9.     public  HTTPSTrustClient(){
  10.     }
  11.     @覆盖
  12.     公共无效 prepareCertificate()  抛出 异常{
  13.         //跳过证书验证
  14.         SSLContext ctx = SSLContext.getInstance(“TLS” );
  15.         X509TrustManager tm =  new  X509TrustManager(){
  16.             @覆盖
  17.             公共无效 checkClientTrusted(X509Certificate []链,字符串authType)  抛出 CertificateException {
  18.             }
  19.             @覆盖
  20.             公共无效 checkServerTrusted(X509Certificate []链,字符串authType)  抛出 CertificateException {
  21.             }
  22.             @覆盖
  23.             public  X509Certificate [] getAcceptedIssuers(){
  24.                 返回null ;
  25.             }
  26.         };
  27.         //设置成已信任的证书
  28.         ctx.init(null ,  new  TrustManager [] {tm},  null );
  29.         this .connectionSocketFactory =  new  SSLConnectionSocketFactory(ctx);
  30.     }
  31. }

总结

  1.  com.darren.test.https.v45;
  2. import  org.apache.http.config.Registry;
  3. import  org.apache.http.config.RegistryBuilder;
  4. import  org.apache.http.conn.socket.ConnectionSocketFactory;
  5. import  org.apache.http.conn.socket.PlainConnectionSocketFactory;
  6. import  org.apache.http.impl.client.CloseableHttpClient;
  7. import  org.apache.http.impl.client.HttpClientBuilder;
  8. import  org.apache.http.impl.client.HttpClients;
  9. import  org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
  10. 公共抽象 HTTPSClient  扩展 HttpClientBuilder {
  11.     私有的 CloseableHttpClient客户端;
  12.     受保护的 ConnectionSocketFactory connectionSocketFactory;
  13.     / **
  14.      *初始化HTTPSClient
  15.      * 
  16.      * @return返回当前实例
  17.      * @例外
  18.      * /
  19.     public  closeableHttpClient init()  抛出 Exception {
  20.         这个.prepareCertificate();
  21.         这个.regist();
  22.         返回这个.client;
  23.     }
  24.     / **
  25.      *准备证书验证
  26.      * 
  27.      * @例外
  28.      * /
  29.     public abstract void  prepareCertificate()  throws  Exception;
  30.     / **
  31.      *注册协议和端口,此方法也可以被子类重写
  32.      * /
  33.     保护无效的 注册表(){
  34.         //设置协议http和https对应的处理socket链接工厂的对象
  35.         注册表<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder。<ConnectionSocketFactory> create()
  36.                 .register(“http” ,PlainConnectionSocketFactory.INSTANCE)
  37.                 .register(“https” ,  this .connectionSocketFactory)
  38.                 。建立();
  39.         PoolingHttpClientConnectionManager connManager =  new  PoolingHttpClientConnectionManager(socketFactoryRegistry);
  40.         HttpClients.custom()setConnectionManager(连接管理)。
  41.         //创建自定义的httpclient对象
  42.         这个.client = HttpClients.custom()。setConnectionManager(connManager).build();
  43.         // CloseableHttpClient client = HttpClients.createDefault();
  44.     }
  45. }

工具类:

  1.  com.darren.test.https.v45;
  2. import  java.util.ArrayList;
  3. import  java.util.List;
  4. import  java.util.Map;
  5. import  java.util.Set;
  6. 导入 org.apache.http.HttpEntity;
  7. 导入 org.apache.http.HttpResponse;
  8. import  org.apache.http.NameValuePair;
  9. import  org.apache.http.client.HttpClient;
  10. import  org.apache.http.client.entity.UrlEncodedFormEntity;
  11. import  org.apache.http.client.methods.HttpGet;
  12. import  org.apache.http.client.methods.HttpPost;
  13. import  org.apache.http.client.methods.HttpRequestBase;
  14. import  org.apache.http.message.BasicNameValuePair;
  15. import  org.apache.http.util.EntityUtils;
  16. 公共 HTTPSClientUtil {
  17.     private static final  String DEFAULT_CHARSET =  “UTF-8” ;
  18.     public static  String doPost(HttpClient httpClient,String url,Map <String,String> paramHeader,
  19.             Map <String,String> paramBody)  throws  Exception {
  20.         返回 doPost(httpClient,url,paramHeader,paramBody,DEFAULT_CHARSET);
  21.     }
  22.     public static  String doPost(HttpClient httpClient,String url,Map <String,String> paramHeader,
  23.             Map <String,String> paramBody,String charset)  throws  Exception {
  24.         String result =  null ;
  25.         HttpPost httpPost =  new  HttpPost(url);
  26.         setHeader(httpPost,paramHeader);
  27.         setBody(httpPost,paramBody,charset);
  28.         HttpResponse响应= httpClient.execute(httpPost);
  29.         if  (response!=  null ){
  30.             HttpEntity resEntity = response.getEntity();
  31.             if  (resEntity!=  null ){
  32.                 结果= EntityUtils.toString(resEntity,字符集);
  33.             }
  34.         }
  35.         返回 结果;
  36.     }
  37.     public static  String doGet(HttpClient httpClient,String url,Map <String,String> paramHeader,
  38.             Map <String,String> paramBody)  throws  Exception {
  39.         返回 doGet(httpClient,url,paramHeader,paramBody,DEFAULT_CHARSET);
  40.     }
  41.     public static  String doGet(HttpClient httpClient,String url,Map <String,String> paramHeader,
  42.             Map <String,String> paramBody,String charset)  throws  Exception {
  43.         String result =  null ;
  44.         HttpGet httpGet =  new  HttpGet(url);
  45.         setHeader(httpGet,paramHeader);
  46.         HttpResponse响应= httpClient.execute(httpGet);
  47.         if  (response!=  null ){
  48.             HttpEntity resEntity = response.getEntity();
  49.             if  (resEntity!=  null ){
  50.                 结果= EntityUtils.toString(resEntity,字符集);
  51.             }
  52.         }
  53.         返回 结果;
  54.     }
  55.     private static void  setHeader(HttpRequestBase request,Map <String,String> paramHeader){
  56.         //设置标题
  57.         if  (paramHeader!=  null ){
  58.             设置<String> keySet = paramHeader.keySet();
  59.             for  (String key:keySet){
  60.                 request.addHeader(key,paramHeader.get(key));
  61.             }
  62.         }
  63.     }
  64.     private static void  setBody(HttpPost httpPost,Map <String,String> paramBody,String charset)  throws  Exception {
  65.         //设置参数
  66.         if  (paramBody!=  null ){
  67.             List <NameValuePair> list =  new  ArrayList <NameValuePair>();
  68.             设置<String> keySet = paramBody.keySet();
  69.             for  (String key:keySet){
  70.                 list.add(new  BasicNameValuePair(key,paramBody.get(key)));
  71.             }
  72.             if  (list.size()>  ){
  73.                 UrlEncodedFormEntity entity =  new  UrlEncodedFormEntity(list,charset);
  74.                 httpPost.setEntity(实体);
  75.             }
  76.         }
  77.     }
  78. }

测试类:

  1.  com.darren.test.https.v45;
  2. import  java.util.HashMap;
  3. import  java.util.Map;
  4. import  org.apache.http.client.HttpClient;
  5. 公共 HTTPSClientTest {
  6.     公共静态无效的 主要(字符串[]参数)  抛出 异常{
  7.         HttpClient httpClient =  null ;
  8.         // httpClient = new HTTPSTrustClient()。init();
  9.         httpClient =  new  HTTPSCertifiedClient()。init();
  10.         String url =  “https://1.2.6.2:8011/xxx/api/getToken” ;
  11.         // String url =“https://1.2.6.2:8011/xxx/api/getHealth”;
  12.         Map <String,String> paramHeader =  new  HashMap <>();
  13.         paramHeader.put(“Accept” ,  “application / xml” );
  14.         Map <String,String> paramBody =  new  HashMap <>();
  15.         paramBody.put(“client_id” ,  “ankur.tandon.ap@xxx.com” );
  16.         paramBody.put(“client_secret” ,  “P @ ssword_1” );
  17.         String result = HTTPSClientUtil.doPost(httpClient,url,paramHeader,paramBody);
  18.         // String result = HTTPSClientUtil.doGet(httpsClient,url,null,null);
  19.         的System.out.println(结果);
  20.     }
  21. }

结果:

  1. <?xml version “1.0” encoding “utf-8” ?>
  2. 令牌RxitF9 // 7NxwXJS2cjIjYhLtvzUNvMZxxEQtGN0u07sC9ysJeIbPqte3hCjULSkoXPEUYGUVeyI9jv7 / WikLrzxYKc3OSpaTSM0kCbCKphu0TB2Cn / nfzv9fMLueOWFBdyz + N0sEiI9K + 0Gp7920DFEncn17wUJVmC0u2jwvM5FAjQKmilwodXZ6a0Dq + D7dQDJwVcwxBvJ2ilhyIb3pr805Vppmi9atXrVAKO0ODa006wEJFOfcgyG5p70wpJ5rrBL85vfy9WCvkd1R7j6NVjhXgH2gNimHkjEJorMjdXW2gKiUsiWsELi / XPswao7 / CTWNwTnctGK8PX2ZUB0ZfA == </ 令牌>

二,HttpURLConnection类

三,春节的RestTemplate

其它方式以后补充

原文地址http://www.bieryun.com/562.html

相关文章
|
1月前
|
JSON 数据挖掘 API
1688API最新指南:商品详情接口接入与应用
本指南介绍1688商品详情接口的接入与应用,该接口可获取商品标题、价格、规格、库存等详细信息,适用于电商平台开发、数据分析等场景。接口通过商品唯一标识查询,支持HTTP GET/POST请求,返回JSON格式数据,助力开发者高效利用1688海量商品资源。
|
1月前
|
JSON 数据挖掘 API
京东API接口最新指南:店铺所有商品接口的接入与使用
本文介绍京东店铺商品数据接口的应用与功能。通过该接口,商家可自动化获取店铺内所有商品的详细信息,包括基本信息、销售数据及库存状态等,为营销策略制定提供数据支持。此接口采用HTTP请求(GET/POST),需携带店铺ID和授权令牌等参数,返回JSON格式数据,便于解析处理。这对于电商运营、数据分析及竞品研究具有重要价值。
|
2月前
|
存储 供应链 监控
1688商品数据实战:API搜索接口开发与供应链分析应用
本文详细介绍了如何通过1688开放API实现商品数据的获取与应用,涵盖接入准备、签名流程、数据解析存储及商业化场景。开发者可完成智能选品、价格监控和供应商评级等功能,同时提供代码示例与问题解决方案,确保法律合规与数据安全。适合企业开发者快速构建供应链管理系统。
|
2月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
1月前
|
JSON API 开发者
京东API最新指南:商品视频接口接入与应用
在电商领域,商品视频能有效提升销售业绩。京东商品视频接口助力开发者获取商品视频信息(播放链接、时长、格式、封面图等),通过 HTTP GET/POST 请求返回 JSON 数据,便于集成到各类应用中,优化展示效果与用户体验。本指南详解接口接入与使用方法。
|
2月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
83 11
|
3月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
129 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
3月前
|
监控 供应链 搜索推荐
亚马逊商品详情接口(亚马逊 API 系列)
亚马逊作为全球最大的电商平台之一,提供了丰富的商品资源。开发者和电商从业者可通过亚马逊商品详情接口获取商品的描述、价格、评论、排名等数据,对市场分析、竞品研究、价格监控及业务优化具有重要价值。接口基于MWS服务,支持HTTP/HTTPS协议,需注册并获得API权限。Python示例展示了如何使用mws库调用接口获取商品详情。应用场景包括价格监控、市场调研、智能选品、用户推荐和库存管理等,助力电商运营和决策。
236 23
|
2月前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
3月前
|
JSON 数据挖掘 API
lazada商品详情接口 (lazada API系列)
Lazada 是东南亚知名电商平台,提供海量商品资源。通过其商品详情接口,开发者和商家可获取商品标题、价格、库存、描述、图片、用户评价等详细信息,助力市场竞争分析、商品优化及库存管理。接口采用 HTTP GET 请求,返回 JSON 格式的响应数据,支持 Python 等语言调用。应用场景包括竞品分析、价格趋势研究、用户评价分析及电商应用开发,为企业决策和用户体验提升提供有力支持。
156 21