API调用类编写
2018-12-08 本文已影响43人
05b0963bb480
目前,各大电商平台都有各自的开放平台,基本上都有开放的API来提供给开发者调用。基本上提供了目前主流开发语言的sdk。但是,也有一些电商平台,没有提供完善的SDK可以调用,这时,也只能通过他们提供的api来调用相应的接口,来实现我们需要的功能了。
本文以调用唯品会API为例,整理分享如何正确调用API。
调用开放平台API
- 学习了解开发平台API接口;
- 了解API接口调用形式;
- 编写统一的接口调用类。
如何编写接口调用类
通过熟悉开发平台的接口,我们可以明确所调用接口的输入参数和输出参数。可以将接口调用的固定参数作为调用类的默认构造函数来处理。如接口配置地址、商户ID等参数。如下图:
默认构造函数从上面的构造函数里,可以看出,构造函数传入了apiname参数,就是定义的api名称,在调用不同API时,同步传入API名称即可。
下面是获取订单基本信息接口所需要的XML文件,我们使用下面的方法来处理:
获取订单基本信息的xml
接下来,我们来定义一个公共方法来统一调用API接口,方法定义如下:
GetServerData
核心调用类 HttpPost,将接口调用需要的数据Post提交到API服务地址,接口将返回数据给客户端,我们本地将会获取到订单的基本信息。
CookieContainer cookie = new CookieContainer();
private string HttpPost(string Url, string postDataStr)
{
string retString = "";
while (true)
{
Stream myResponseStream = null;
StreamReader myStreamReader = null;
try
{
byte[] byteArray = Encoding.UTF8.GetBytes(postDataStr);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = Encoding.UTF8.GetByteCount(postDataStr);
request.CookieContainer = cookie;
request.Timeout = 6000000;
request.KeepAlive = true;
request.ServicePoint.ConnectionLimit = 1024;
Stream myRequestStream = request.GetRequestStream();
myRequestStream.Write(byteArray, 0, byteArray.Length);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode != httptatusCode.OK)
{
continue;
}
response.Cookies = cookie.GetCookies(response.ResponseUri);
myResponseStream = response.GetResponseStream();
myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));
retString = myStreamReader.ReadToEnd();
break;
}
catch (WebException e)
{
e.StackTrace.ToString();
System.Diagnostics.Trace.WriteLine(e.Message);
WriteSysLog.Log("servererr", e.Message + "");
if (true)
continue;
}
finally
{
myStreamReader.Close();
myResponseStream.Close();
}
}
return retString;
}
这样的话,通过这个统一的接口调用类,我们就可以调用其他的api接口了,只要接口调用所需的数据参数准确无误,都会返回正确的结果的。