主要内容

RESTful APIMATLAB函数执行

MATLAB®生产服务器™MATLAB函数RESTful API使您能够执行评估MATLAB函数在远程服务器上使用MATLAB的JSON表示数据类型和协议缓冲区。协议缓冲区只支持在Java万博1manbetx®和。net客户端api。

您可以编写客户机代码使用MATLAB生产服务器在基于网络的语言如JavaScript RESTful API®并将它嵌入到HTML页面。然后您可以使用这些web页面从发送请求和检索响应MATLAB生产服务器实例。基于web的应用程序时可能更适合客户端代码写在JavaScript中,你可以使用任何HTTP支持的编程语言(Java、Python、c++、。net、和许多其他开发客户机应用程序。万博1manbetx

如果客户程序发出请求来自不同领域,使用JavaScript程序员必须验证是否跨源资源共享在服务器上启用(歌珥)。在服务器上启用歌珥,服务器管理员必须设置适当的值cors-allowed-origins财产的main_config服务器配置文件。

RESTful API的特点

MATLAB函数执行的RESTful API使用HTTP请求-响应模式进行交流沟通MATLAB生产服务器。这个模型包括请求方法,响应代码,消息头和消息体。RESTful API具有以下特点:

  • HTTP methods-POST,获取和删除表单客户机和服务器之间的通信的主要方式。

  • 独特的统一资源标识符(uri)识别服务器创建的资源。

  • 消息标题传达元数据等内容类型的请求。

    • API支持万博1manbetxapplication / json作为HTTP内容类型头。

    • MATLAB函数执行的RESTful API还支持万博1manbetx应用程序/ x-google-protobuf作为HTTP内容类型通过Java和。net客户端api。

  • 请求的消息体包含信息发送到服务器。

    • 如果使用JSON作为数据的序列化格式,输入MATLAB函数包含在一个部署归档文件中表示JSON和封装消息的体内。有关更多信息,请参见MATLAB的JSON表示数据类型

    • 如果你使用protocol buffers数据序列化(protobuf), Java和。net客户端库提供助手类内部基于原型格式创建protobuf消息并返回对应的字节数组。使用这个字节数组在请求的消息体。

  • 消息体的响应包含一个请求信息,如国家或结果。

    如果你使用protobuf数据序列化,Java和。net客户端库提供方法和类protobuf响应进行反序列化。

  • API支持服务器万博1manbetx的同步和异步模式。

请注意

接下来的例子和图形使用JSON作为数据序列化格式。

同步执行

在同步模式下,客户的帖子请求后,服务器的工作进程模块所有进一步的请求,直到它完成了处理原始的请求。处理完成后,工人自动返回响应给客户端。因为它是块在请求处理的工人,如果有可用的其他工人,服务器可以接受其他同步请求进行处理。做一个同步请求到服务器并等待响应,使用后同步请求

下面的图形说明了同步模式的RESTful API是如何工作的。

当服务器收到一个请求在同步模式下,直到完成它阻塞所有其他请求处理当前请求。

幻方的例子:同步执行使用RESTful API和JSON

这个例子展示了如何使用RESTful API和JSON提供了两个独立implementations-one使用JavaScript和其他使用Python®。当您执行这个示例中,服务器将返回一个列表的25个逗号分隔值。这些值的输出部署MATLAB函数mymagic,用列为主的格式表示。MATLAB代码mymagic函数。

函数= mymagic(在)=魔法(的);结束

对于这个例子,MATLAB生产服务器包含部署MATLAB函数的实例mymagic需要运行。有关如何创建一个可部署归档文件的更多信息,参见为MATLAB生产服务器创建可部署归档文件。建立一个服务器上的更多信息,见创建服务器实例

JavaScript实现

JavaScript实现的基于rest的API,您包括内的脚本脚本脚本< > < / >一个HTML页面的标签。当你打开这个HTML页面在一个web浏览器,服务器返回的值mymagic函数。注意,服务器需要歌珥启用了JavaScript代码工作。有关如何启用的更多信息歌珥,请参阅cors-allowed-origins

下面是一个示例HTML代码嵌入JavaScript。

< !DOCTYPE html > < html > <头> <标题>幻方< /名称> <脚本> var = new XMLHttpRequest请求();/ /议员RESTful API:指定URL var URL = " http://localhost: 9910 / ctfArchiveName / mymagic”;/ /议员RESTful API:指定HTTP POST方法request.open(“文章”,url);/ /议员RESTful API:指定内容类型application / json请求。setRequestHeader(“内容类型”、“application / json”);var params = {" nargout”: 1、“rhs”: [5]};request.send (JSON.stringify (params));请求。onreadystatechange = function(){如果请求。readyState = = 4){/ /议员RESTful API:如果(请求检查HTTP状态代码200。状态= = 200){结果= JSON.parse (request.responseText); if(result.hasOwnProperty("lhs")) { //MPS RESTful API: Index into "lhs" to retrieve response from server document.getElementById("demo").innerHTML = '

' + result.lhs[0].mwdata; } } else if(result.hasOwnProperty("error")) { alert("Error: " + result.error.message); } } };

MPS RESTful API and JSON EXAMPLE

>> mymagic(5)

# output from server returned in column-major format

Python实现

这个示例使用Python 2. x。如果您正在使用Python 3。x,你必须改变一些部分的代码。

Python代码示例。

# !/usr/bin/python #这个例子使用Python 2。x在Python 3 #。x使用:#进口http。客户机#康涅狄格州= http.client.HTTPConnection (localhost: 9910)进口的进口httplib的json康涅狄格州= httplib.HTTPConnection (“localhost: 9910”)标题={“内容类型”:“application / json”} = json。转储({“nargout”: 1、“rhs”: [5]}) conn.request(“后”,“ctfArchiveName / mymagic”,身体,头)响应= conn.getresponse()如果响应。状态= = 200:结果= json.loads (response.read())如果“韩”结果:打印(“魔法(5)的结果是“+ str(结果[“韩”][0][" mwdata "])) elif“错误”的结果:打印(“错误:”+ str(结果(“错误”)(“信息”)))

对于一个端到端的工作流部署一个MATLAB函数的例子MATLAB生产服务器使用RESTful API和JSON调用它,明白了基于web的工具使用RESTful API、JSON和JavaScript

异步执行

在异步模式下,客户端可以发布多个请求,并在每种情况下服务器响应通过创建一个新资源,返回一个独特的对应于每个请求的URI。URI是封装在响应消息的主体。客户端可以使用服务器返回的URI查询和检索结果等使用。

RESTful API调用的异步模式列出下表:

调用 目的
异步请求后

向服务器发出异步请求

表示异步请求

查看异步请求的服务器是如何表示的

得到请求的集合

视图的请求

获取状态信息

获取状态信息的请求

得到请求的结果

检索请求的结果

后取消请求

取消请求

删除请求

删除一个请求

下面的图形说明了RESTful API是如何工作在异步模式。图形不包括所有的RESTful API调用。调用的完整列表,请参阅前面的桌子上。

异步请求处理。

例如:幻方的异步执行使用RESTful API和JSON

这个例子展示了如何使用RESTful API为异步执行使用JavaScript和JSON。当你执行这个例子中,服务器将返回一个100个逗号分隔的值列表。这些值的输出部署MATLAB函数mymagic,用列为主的格式表示。MATLAB代码mymagic函数。

函数= mymagic(在)=魔法(的);结束

对于这个例子,MATLAB生产服务器包含部署MATLAB函数的实例mymagic需要运行。有关如何创建一个可部署归档文件的更多信息,参见为MATLAB生产服务器创建可部署归档文件。建立一个服务器上的更多信息,见创建服务器实例

下面是一个示例HTML代码嵌入JavaScript。

< !DOCTYPE html > < html > <头> <标题>幻方< /名称> < script src = " http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js " > < /脚本> <脚本> / /议员RESTful API(异步):var主机名指定URL = " http://localhost: 9910;var模式=“异步”;var clientID = " client100”;var ctfName = " mymagic”;var matlabFuncName = " mymagic " var url =主机名+ " + ctfName + " + matlabFuncName +”?模式= " +模式+ "客户= " + clientID;/ /指定参数var params = {“nargout”: 1、“rhs”: [100],“outputFormat”:{“模式”:“小”}};美元。ajax (url,{数据:JSON.stringify (params) / /议员RESTful API(异步):指定application / json内容类型,并指定HTTP POST方法contentType: application / json,方法:“文章”,数据类型:json,成功:函数(响应){/ /打印请求URI网页$ (" # requestURI ")。html(“<强>请求URI: < /强> ' +主机名+ response.self);pollUsingUp(响应); } }); // Polling Server using UP function pollUsingUp(request) { setTimeout(function() { var newSeq = parseInt(request.lastModifiedSeq) + 1; var queryURI = hostname + request.up + "?since=" + newSeq + "&ids=" + request.id; $.ajax({ url: queryURI, method: 'GET', dataType: 'json', success: function(response) { //Poll again if no data about the request was received. if (response.data.length == 0) { pollUsingUp(request); return; } var requestResource = response.data[0]; // Print "state" of request $("#state").html('State: ' + requestResource.state); if (requestResource.state != "READY" && requestResource.state != "ERROR") { //Keep polling if the request is not done yet. pollUsingUp(requestResource); } else { var requestURI = hostname + requestResource.self; var responseURI = hostname + requestResource.self + "/result"; // Get result. $.ajax({ url: responseURI, // MPS RESTful API (Asynchronous): Specify HTTP GET method method: 'GET', dataType: 'json', success: function(response) { if (response.hasOwnProperty("lhs")) { $("#demo").html('

' + response.lhs[0] + '

'); //Uncomment the next line if using JSON large representation //response.lhs[0].mwdata + '

'); } else if (response.hasOwnProperty("error")) { alert("Error: " + response.error.message); } // MPS RESTful API (Asynchronous): Specify HTTP DELETE method $.ajax({ url: requestURI, method: 'DELETE' }); } }); } } }); }, 200); }

MPS RESTful API and JSON EXAMPLE

>> mymagic(5)

# output from server returned in column-major format

管理HTTP Cookie

一个MATLAB生产服务器在Azure上部署®提供了一个HTTPS端点URL调用MATLAB功能部署到服务器上。Azure应用网关提供了基于cookie会话关联,它使用cookie来保持用户会话在同一台服务器上。从客户端接收请求程序,应用程序网关设置set - cookieHTTP响应头信息服务器处理请求的虚拟机(VM)。

异步请求的执行

使用异步请求的客户机程序执行一个MATLAB函数部署到服务器必须设置饼干HTTP请求头的值set - cookie所有后续请求头。这将确保相同的服务器虚拟机过程第一个请求过程所有后续请求的会话。

同步请求执行

客户端程序使用同步请求执行一个MATLAB函数部署到服务器上不能设置饼干HTTP请求头的值set - cookie头,必须明确的价值饼干头如果它之前已经设置。这将确保同步请求负载均衡和服务器虚拟机不处理它们。

关于架构和资源的更多信息MATLAB生产服务器在Azure上,看到在Azure架构和资源在Azure架构和资源

相关的话题