手機網(wǎng)站開發(fā)成本網(wǎng)絡(luò)營銷環(huán)境宏觀微觀分析
【 聲明:版權(quán)所有,歡迎轉(zhuǎn)載,請勿用于商業(yè)用途。 聯(lián)系信箱:feixiaoxing @163.com】
? ? ? ? 很多時候,客戶需要開發(fā)的不僅僅是一個上位機系統(tǒng),它還有其他很多配套的系統(tǒng)或設(shè)備,比如物流小車、立庫、數(shù)字孿生等一整套系統(tǒng)。這個時候,上位機系統(tǒng)就需要和各個子系統(tǒng)進行數(shù)據(jù)交互訪問。目前,主要的數(shù)據(jù)訪問有兩種方式,一種是基于數(shù)據(jù)庫的訪問方法;另外一種就是基于WebApi的訪問方式。如果是基于數(shù)據(jù)庫的訪問,這相當(dāng)于很多數(shù)據(jù)都暴露給了對方,有時并不安全;而如果是WebApi訪問,則在安全性上面容易控制得多。
? ? ? ? 目前,假設(shè)客戶提供了一堆WebApi給我們進行調(diào)試,或者和我們約定好了WebApi接口,那么應(yīng)該怎么開發(fā)呢?通常情況下,我們是c# code和postman一起測試開發(fā)。postman是一個開發(fā)工具,它可以模擬發(fā)送web請求。這個時候呢,如果postman發(fā)送沒有問題,那么我們就要check一下自己的代碼;如果是postman都有問題,那么就要和其他廠家溝通一下,看看問題出在什么地方。這個時候,postman就相當(dāng)于是一個驗證的工具,可以幫助我們分析問題發(fā)生在自己這里,還是在對方。
1、準(zhǔn)備server.py
? ? ? ? 有的時候,不同廠家約定好了接口,但是對方未必開發(fā)完畢。所以這個時候,為了測試,我們就不用等待對方開發(fā)完畢,利用python webpy框架寫一個小的server.py代碼也是可以的。
import web
import jsonurls = ('/', 'hello'
)
app = web.application(urls, globals())
class hello: def POST(self):data = web.data()print datareturn json.dumps({'result':'ok'})if __name__ == '__main__':app.run()
2、啟動server.py
? ? ? ? 代碼準(zhǔn)備好了之后,下面就可以準(zhǔn)備server.py了。直接在shell下面輸入如下命令即可,其中8081代表著server的端口,
python server.py 8081
3、準(zhǔn)備c# wpf測試界面
? ? ? ? 和之前一篇文章一樣,這個c# wpf只要準(zhǔn)備一個帶有按鈕的界面就可以了,很簡單,
<Window x:Class="WpfApp.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:WpfApp"mc:Ignorable="d"Title="HttpDemo" Height="450" Width="800"><Grid><Button x:Name="Http" Content="Http" Foreground="Blue" Click="Start_Click" HorizontalAlignment="Left" Margin="300,195,0,0" VerticalAlignment="Top" Width="95" Height="45"></Button></Grid>
</Window>
? ? ? ? 查看界面效果的話,就是這樣的,
4、添加c#代碼
? ? ? ? 因為界面中只有一個按鈕,所以實現(xiàn)的部分主要也就是按鈕的回調(diào)函數(shù)。在c# wpf中,有一個類HttpClient,它在System.Net.Http空間里面。我們可以利用這個類來實現(xiàn)http的數(shù)據(jù)訪問。當(dāng)然,因為涉及到了json數(shù)據(jù)訪問,所以還需要安裝一下Newtonsoft,
? ? ? ? 安裝好了之后,就可以開始代碼編寫了。因為流程部分不太復(fù)雜,所以建議大家直接看代碼就可以了,
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfApp
{public partial class MainWindow : Window{private const string ApiUrl = "http://127.0.0.1:8081/";private const string UserName = "123";private const string Password = "456";private const string DataToSend = "2023.12.29";public MainWindow(){InitializeComponent();}private async void Start_Click(object sender, RoutedEventArgs e){try{using (HttpClient httpClient = new HttpClient()){var requestData = new{name = UserName,passwd = Password,data = DataToSend};string jsonContent = Newtonsoft.Json.JsonConvert.SerializeObject(requestData);var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");HttpResponseMessage response = await httpClient.PostAsync(ApiUrl, content); if (response.IsSuccessStatusCode){string responseData = await response.Content.ReadAsStringAsync();MessageBox.Show("API Response: " + responseData, "Success");}else{MessageBox.Show("Error: " + response.StatusCode, "Error");}}}catch (Exception ex){MessageBox.Show("Exception: " + ex.Message, "Error");}}}
}
5、測試和調(diào)試
? ? ? ? 界面和代碼都o(jì)k之后,就可以開始調(diào)試代碼了。調(diào)試的時候分成兩個部分,第一,查看按鈕單擊之后,是不是有彈框彈出,顯示調(diào)用ok;第二,查看server.py處有沒有數(shù)據(jù)打印。如果兩者都沒有什么問題,那說明測試就ok了。不然就要回去查一查,問題可能出在什么地方。不出意外的話,單擊按鈕后,界面效果應(yīng)該是這樣的,
? ? ? ? 而server處的打印則應(yīng)該是這樣的,
注:
? ? ? ? 如果c# wpf和webpy不在同一臺電腦上面,主要需要解決一下跨域的問題,注意下即可,
class DataHandler:def GET(self):web.header('Access-Control-Allow-Origin', '*')return "Hello from WebPy GET"def POST(self):web.header('Access-Control-Allow-Origin', '*')data = web.data()return "Hello from WebPy POST. Received data: " + data