的MATLAB®生产服务器™用于MATLAB函数执行的RESTful API使您能够使用MATLAB数据类型和协议缓冲区的JSON表示在远程服务器上评估MATLAB函数。协议缓冲区支持仅在Java中可用金宝app®和。net客户端api。
可以编写使用MATLAB生产服务器基于web的语言(如JavaScript)中的RESTful API®并将其嵌入HTML页面。然后,您可以使用这些网页发送请求和检索响应MATLAB生产服务器实例。虽然基于web的应用程序可能更适合用JavaScript编写的客户端代码,但您可以使用任何HTTP支持的编程语言,如Java、Python、c++、. net和许多其他语言来开发客户端应用程序。金宝app
如果客户端程序从不同的域发出请求,使用JavaScript的程序员必须验证服务器上是否启用了CORS (Cross-Origin Resource Sharing)。要在服务器上启用CORS,服务器管理员必须设置相应的值cors-allowed-origins
财产的main_config
服务器配置文件。
用于MATLAB函数执行的RESTful API使用HTTP请求-响应模型进行通信MATLAB生产服务器.该模型包括请求方法、响应代码、消息头和消息正文。RESTful API具有以下特点:
HTTP方法(post、GET和delete)构成了客户机和服务器之间通信的主要模式。
唯一统一资源标识符(uri)标识服务器创建的资源。
消息头传递元数据,例如内容类型的请求。
API支持金宝appapplication / json
作为HTTP内容类型
头。
用于MATLAB函数执行的RESTful API也支持金宝app应用程序/ x-google-protobuf
作为HTTP内容类型
仅通过Java和。net客户端api。
请求的消息体包含要发送到服务器的信息。
如果使用JSON作为数据序列化格式,则在已部署归档文件中包含的MATLAB函数的输入将以JSON表示,并封装在消息体中。有关更多信息,请参见MATLAB数据类型的JSON表示.
如果您使用协议缓冲区(protobuf)进行数据序列化,那么Java和. net客户端库提供了帮助器类来基于protobuf格式在内部创建protobuf消息,并返回相应的字节数组。在请求的消息体中使用此字节数组。
响应的消息体包含关于请求的信息,如状态或结果。
如果使用protobuf进行数据序列化,Java和. net客户端库提供了反序列化protobuf响应的方法和类。
API同时支持服金宝app务器的同步和异步模式。
请注意
下面的示例和图形使用JSON作为数据序列化格式。
在同步模式下,客户端发出请求后,服务器的工作进程将阻塞所有进一步的请求,直到它完成对原始请求的处理。处理完成后,worker自动返回一个响应给客户端。由于在请求处理期间阻塞的是worker,如果有其他可用的worker,服务器可以接受其他同步请求进行处理。要向服务器发出同步请求并等待响应,请使用后同步请求.
下图说明了RESTful API在同步模式下是如何工作的。
这个例子展示了如何通过提供两个独立的实现来使用RESTful API和JSON—一个是usingJavaScript另一种用法Python®.当您执行这个示例时,服务器返回一个由25个逗号分隔的值组成的列表。这些值是已部署的MATLAB函数的输出mymagic
,以列-主格式表示。的MATLAB代码mymagic
函数。
函数Out = mymagic(in) Out = magic(in);结束
要运行这个示例,aMATLAB生产服务器实例包含已部署的MATLAB函数mymagic
需要跑步。有关如何创建可部署归档的更多信息,请参见为MATLAB生产服务器创建可部署归档.有关设置服务器的更多信息,请参见创建服务器实例.
使用RESTful API的JavaScript实现,可以将脚本包含在脚本脚本< > < / >
HTML页面的标签。在web浏览器中打开此HTML页面时,服务器返回mymagic
函数。注意,服务器需要有歌珥
使JavaScript代码能够工作。有关如何启用的更多信息歌珥
,请参阅cors-allowed-origins
.
下面是带有嵌入式JavaScript的示例HTML代码。
<!DOCTYPE html>Magic Square MPS RESTful API and JSON EXAMPLE
>> mymagic(5)
# output from server returned in column-major format
本例使用Python 2.x。如果你正在使用Python 3。,则必须更改代码的某些部分。
下面是示例Python代码。
#!/usr/bin/python #使用Python 2。在Python 3中。X使用:#import http。client #conn = http.client.HTTPConnection("localhost:9910") import httplib import json conn = httplib. httpconnection ("localhost:9910") headers = {"Content-Type": "application/json"} body = json. jsondump ({"nargout": 1, "rhs": [5]}) conn.request("POST", "/ctfArchiveName/mymagic", body, headers) response = conn.getresponse() if response. dump ({"nargout": 1, "rhs": [5]})result == 200: result = json.loads(response.read()) if "lhs" in result: print(" result of magic(5) is " + str(result["lhs"][0]["mwdata"])) if "error" in result: print(" error: " + str(result["error"]["message"]))
为端到端工作流部署MATLAB函数的示例MATLAB生产服务器以及使用RESTful API和JSON调用它,参见基于web的工具使用RESTful API、JSON和JavaScript.
在异步模式下,客户机能够发布多个请求,在每种情况下,服务器都会通过创建新资源并返回对应于每个请求的唯一URI来响应。URI被封装在响应消息体中。客户端可以使用服务器返回的URI来查询和检索其他用途的结果。
异步模式的RESTful API调用如下表所示:
调用 | 目的 |
---|---|
异步请求后 | 向服务器发出异步请求 |
异步请求的GET表示 | 查看如何表示向服务器发出的异步请求 |
GET请求集合 | 查看请求的集合 |
获取状态信息 | 获取请求的状态信息 |
GET请求结果 | 检索请求的结果 |
后取消请求 | 取消请求 |
删除请求 | 删除一个请求 |
下图说明了RESTful API在异步模式下的工作方式。这个图形并没有涵盖所有的RESTful API调用。有关调用的完整列表,请参见上表。
这个例子展示了如何使用RESTful API和JSON来使用JavaScript进行异步执行。当您执行这个示例时,服务器返回一个由100个逗号分隔的值组成的列表。这些值是已部署的MATLAB函数的输出mymagic
,以列-主格式表示。的MATLAB代码mymagic
函数。
函数Out = mymagic(in) Out = magic(in);结束
要运行这个示例,aMATLAB生产服务器实例包含已部署的MATLAB函数mymagic
需要跑步。有关如何创建可部署归档的更多信息,请参见为MATLAB生产服务器创建可部署归档.有关设置服务器的更多信息,请参见创建服务器实例.
下面是带有嵌入式JavaScript的示例HTML代码。
<!DOCTYPE html>Magic Square MPS RESTful API and JSON EXAMPLE
>> mymagic(5)
# output from server returned in column-major format
一个MATLAB生产服务器在Azure上部署®提供一个HTTPS端点URL来调用部署到服务器的MATLAB函数。Azure应用程序网关提供基于cookie的会话关联,它使用cookie在相同的服务器上保持用户会话。在接收到来自客户端程序的请求时,应用程序网关设置set - cookie
包含处理请求的服务器虚拟机(VM)信息的HTTP响应头。
使用异步请求来执行部署到服务器的MATLAB函数的客户端程序必须设置饼干
的值的HTTP请求头set - cookie
所有后续请求的报头。这确保处理第一个请求的服务器VM处理该会话的所有后续请求。
使用同步请求来执行部署到服务器的MATLAB函数的客户端程序必须不设置饼干
的值的HTTP请求头set - cookie
的值必须清除饼干
标题,如果它已被预先设置。这确保了同步请求是负载均衡的,同一个服务器虚拟机不会处理它们。
有关的体系结构和资源的更多信息MATLAB生产服务器在Azure上,看到Azure上的架构和资源和Azure上的架构和资源.