4

我使用 mvc4 asp.net web api 创建了一个 RestFUL api,我的一个客户需要从他的 visual fox pro 系统中使用一些服务。

他告诉我不能使用我的 RestFUL 服务,因为没有办法。我对 Visual FoxPro 一无所知。

有什么方法可以使用 Visual Fox Pro 的 RestFUL 服务?

4

4 回答 4

1

你真的在这里问了两个问题。

1:“在 Visual FoxPro 中是否有读取 RESTful Web 服务的本机功能?”

没有。在 Web 服务从古怪的浏览器转向中心技术之前,Visual FoxPro 的有意义的开发就停止了,因此这个遗留的 xBase 系统从未调整为能够与它们通信。

2:“有没有办法将数据从 RESTful Web 服务获取到 Visual FoxPro 中?”

是的。VFP 可以充当 COM 或 ODBC 客户端,并且可以利用从这些方法中的任何一种中继的数据。如果您没有遇到安全墙并且有足够的技能手动指定 HTTP 标头,那么标准 (1) MSXML.XMLhttpRequest 对象是您的最佳选择。

请注意,尽管至少有一个库可以将 JSON 转换为 VFP 可用的对象,但您将无法在 FoxPro 中本地使用 JSON。如果您有选择,XML 是更可取的,因为您可以利用在 Visual FoxPro 的最后一个版本中引入的 XMLAdapter 类。

(1:“标准”在这里的意思是“Windows 平台上的标准。”任何允许运行 Visual FoxPro 并且应该允许在 Internet 附近的任何地方都已经安装了 MSXML。)

于 2014-07-03T16:31:45.607 回答
1

虽然没有从 VFP 调用 REST 服务的“本机”方式,但是您可以轻松地创建一个 MSXML2.ServerXMLHTTP 对象,它是 Windows 自带的。我只使用 MSSoap.SoapClient30 进行 SOAP 调用(您必须安装它),但我更喜欢 MSXML2.ServerXMLHTTP 对象进行 REST 调用。

下面是一个如何通过 VFP 调用 REST 服务的示例。

调用 REST GET 方法的示例

xmlHttp = CREATEOBJECT("MSXML2.ServerXMLHTTP")
xmlHttp.open("GET", "put url with parameters here", null)
xmlHttp.setRequestHeader("Content-Type", "text/xml")
xmlHttp.send("")
result = xmlHttp.responseText
? result

调用 REST POST 方法的示例

xmlHttp = CREATEOBJECT("MSXML2.ServerXMLHTTP")

xmlHttp.open("POST", "put URL here", null)
xmlHttp.setRequestHeader("Content-Type", "text/xml")
xmlHttp.send("put string to send in body")
result = xmlHttp.responseText
? result
于 2017-08-02T18:55:10.983 回答
0

是的,

FoxPro 可以使用 Mircrsoft Soap SDK 软件连接到任何 WebServervice,这个最好是返回一个 XML。

这是我在安装免费软件“soapsdk.exe”后使用的

local loWS, loP

loWS=createobject("mssoap.soapclient30")    

loWS.mssoapinit("http://nn.nn.nnn.nn:80/Default.asmx?WSDL")

loP=loWS.name_public_method(html_param_1,html_param_2...)

loP 包含可以包含 XML 格式的结果

于 2014-10-27T11:47:28.707 回答
0

现在是 2021 年,没有本地方法可以做到这一点。但是,调用 REST 服务所需的只是:

  • HTTP 客户端
  • JSON 序列化器

您可以使用 FoxPro 代码(或此线程中其他答案中显示的一些 XmlHttp 代码)创建一个非常简单的 WinHttp HTTP 客户端:

FUNCTION WinHttp(lcUrl, lcVerb, lcPostData, lcContentType)
LOCAL lcResult

*** FOR DEMOS ONLY!
IF EMPTY(lcUrl)    
   RETURN null
ENDIF
IF EMPTY(lcVerb)
   lcVerb = "GET"
   IF !EMPTY(lcPostData)
      lcVerb = "POST"
   ENDIF
ENDIF   

*** Example of using simplistic WinHttp client to retreive HTTP content
LOCAL loHttp as WinHttp.WinHttpRequest.5.1, lcResult
loHTTP = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")    

loHTTP.Open(lcVerb, lcUrl,.F.)

IF !EMPTY(lcContentType) AND lcVerb = "POST" OR lcVerb = "PUT" 
    loHttp.SetRequestHeader("Content-Type",lcContentType)
ENDIF   

*** If using POST you can post content as a parameter
IF !EMPTY(lcPostData)
    loHTTP.Send(lcPostData)
ELSE
   loHttp.Send()    
ENDIF

lcResult = loHttp.ResponseText

loHttp = NULL 

RETURN lcResult

这是没有纠错的非常基本的代码,但你可以从那里开始。

lcResult = WinHttp("https://albumviewer.west-wind.com/api/artist/1")
? lcResult && JSON response


*** Create some JSON to post manually
TEXT TO lcJson NOSHOW
{
  "username": "test",
  "password": "test"
}
ENDTEXT
lcResult = WinHttp("https://albumviewer.west-wind.com/api/authenticate","POST",lcJson,"application/json")
? lcResult    && JSON

对于 JSON 序列化和解析,您需要使用某种库。下面是几个仍在维护的 FoxPro JSON 库:

组装wwHttpwwJsonSerializer手动看起来像这样以发出POST请求并接收 JSON 结果作为对象:

LOCAL loHttp as wwHttp, loSer as wwJsonSerializer
loHttp = CREATEOBJECT("wwHttp")
loSer = CREATEOBJECT("wwJsonSerializer")

loUser = CREATEOBJECT("EMPTY")
ADDPROPERTY(loUser,"Username", "test")
ADDPROPERTY(loUser, "Password", "test")
lcJson = loSer.Serialize(loUser)

loHttp.cContentType = "application/json"
lcJson = loHttp.Post("https://albumviewer.west-wind.com/api/authenticate", lcJson)

IF loHttp.nError # 0
   ? "Failed: " + loHttp.cErrorMsg
ENDIF
IF loHttp.cResultCode = "401"
   ? "Login failed. Invalid credentials"
   RETURN
ENDIF   
IF loHttp.cResultCode # "200"
   ? "Failed: " + loHttp.cResultCode + "  " + loHttp.cResultCodeMessage
   RETURN
ENDIF   

loAuth = loSer.Deserialize(lcJson)

lcToken = loAuth.Token   && JSON Object contains token
IF EMPTY(lcToken)
   ? "Authentication failed. Invalid token."
   RETURN
ENDIF

如果您需要更多详细信息和背景信息,您可以在此处查看详细的白皮书,其中讨论了 FoxPro 特定场景的客户端和服务器端:

于 2021-10-30T22:03:20.027 回答