主要内容

本页采用了机器翻译。点击此处可查看英文原文。

JSON 中的 MATLAB 函数签名

R2026b

为了让 RESTful 客户端使用发现 API 获取部署到 MATLAB® Production Server™ 的 MATLAB 函数的函数签名,您必须在打包可部署存档时将有关 MATLAB 函数的信息嵌入 JSON 文件中。

将要部署到 Production Server Compiler 的 MATLAB 函数添加后,在 Include MATLAB function signature file 部分中选择 Create File 按钮。此操作将创建一个名为 <projectName>functionSignatures.json 的 JSON 文件模板。

<projectName>functionSignatures.json 文件是一个 JSON 对象。它包含一个架构版本和一个函数对象列表。每个函数对象包含一个签名对象列表,每个签名对象包含一个参量对象列表。

如果您的 MATLAB 函数具有 struct 或 cell 数据类型作为输入或输出,则可以使用 typedef 对象将它们的描述添加到 JSON 文件中。

JSON 文件不支持添加 datetime 和 enumeration 值的描述,尽管您的 MATLAB 函数可以将这些数据类型作为输入或输出。

您可以使用 发现服务 从服务器访问 JSON 目标文件。

警告

validateFunctionSignaturesJSON (MATLAB) 函数不支持验证 MATLAB Production Server <projectName>functionSignatures.json。

Example of a function signature JSON file

架构版本的值是 <major#>.<minor#>.<patch#> 格式的 JSON 字符串,其中每个数字必须是非负整数。

函数对象

函数对象会自动从您添加到工程中的 MATLAB 函数名称继承其名称。函数对象的目的行继承自 MATLAB 函数中提供的函数描述。每个函数对象的值都是一个签名对象。

{
  "functionName1": { signatureObj1 },
  "functionName2": { signatureObj2 }
}

签名对象

签名对象定义了函数的输入和输出参量列表以及支持的平台。属性的值是参量对象的数组。

{
  "functionName1":
  {
     "inputs": [ argumentObj1, argumentObj2 ]
  }
}
每个签名可以包含以下属性。

属性描述JSON 数据类型值

inputs

函数输入参量列表

参数参量数组

outputs

函数输出参量列表

参数参量数组

参量对象

参量对象定义每个输入和输出参量的信息。

{
  "functionName1":
  {
     "inputs":
     [
        {"name":"in1",  "type":["double"], "purpose":"<input 1 description>"},
        {"name":"in2",  "type":["logical"], "purpose":"<input 2 description>"}
     ]
  }
}
输入在 JSON 文件中出现的顺序非常重要。例如,在调用 functionName1 函数时,in1 必须出现在 in2 之前。

每个参量对象可以包含以下属性。

输入或输出参量的名称,指定为 JSON 字符串。您必须指定此属性及其对应的值。name 属性不需要与函数中的参量名称匹配,但最好与任何帮助文档匹配。

示例:"name":"myArgumentName"

type 属性定义参量必须具有的 MATLAB 数据类型。

值参量描述

"double"

必须是双精度数

"single"

必须是单个精度数字

"int8"

必须是 8 位有符号整数

"uint8"

必须是 8 位无符号整数

"int16"

必须是 16 位有符号整数

"uint16"

必须是 16 位无符号整数

"int32"

必须是 32 位有符号整数

"uint32"

必须是 32 位无符号整数

"int64"

必须是 64 位有符号整数

"uint64"

必须是 64 位无符号整数

"logical"

必须是逻辑数组

"char"

必须是字符数组

"string"

必须是字符串数组

对于 cell 和 struct,请参阅 Typedef 对象。

JSON 文件不支持添加 datetime 和 enumeration 值的描述。

示例:{ "name": "in", "type": ["double"] }

size 属性定义输入的数组维度。它是以逗号分隔的整数列表。

示例:{ "name": "in", "type": ["double", "size=1,1"] }

purpose 属性为参量提供了描述。

示例:{ "name": "in", "type": ["double", "size=1,1", "purpose": "Input argument" }

如果您想对 purpose 参量使用国际字符,请为您的服务器计算机启用 UTF-8 支持。

Typedef 对象

Typedef 对象定义元胞数组和结构体。仅当参量对象的值是元胞或结构体时才添加 typedef 对象。Production Server Compiler 生成的 JSON 文件模板默认没有此对象。

在架构中,使用名称 _typedefs 及其值作为一个或多个单元格或结构体对象的名称来指示 typedef 对象。类型与参量对象相同。

使用同构元胞数组的示例:如果 MATLAB 函数 sortinput 接受一个元胞数组作为输入并返回一个元胞数组作为输出,并且输入中的每个元胞都由一个结构体组成,则其 JSON 表示如下。

{
    "_schemaVersion": "1.1.0",
    "_typedefs" : {
        "struct_names_scores_of_students": {
            "purpose": "Names and scores of students",
            "type": "struct",
            "fields": [
                {"name": "Name",  "type": "char"},
                {"name": "Score", "type": ["double","size=1,1"]}
            ]
        },
        "cell_student_information": {
            "purpose": "Cell representing student information",
            "type": "cell",
            "elements": {
                "type": "struct:struct_names_scores_of_students"
            }
        }
    },
    "sortinput": {
        "inputs": [
            {
                "name": "unsorted_input",
                "type": ["cell:cell_student_information"],
                "purpose": "Unsorted list of students and their scores"
            }
        ],
        "outputs": [
            {
                "name": "sorted_output",
                "type": ["cell:cell_student_information"],
                "purpose": "Sorted list of students with respect to their scores"
            }
        ]
    }
}

使用异构元胞数组的示例:如果 MATLAB 函数 organize 接受一个长度为 3 的包含字符的元胞数组、一个方阵和一个字符串作为输入,并返回一个双精度向量作为输出,则其 JSON 表示如下。

{
       "_typedefs": {
           "cell_het_mydata": {
               "purpose": "cell containing character, matrix, and string",
               "type" : "cell",
               "elements" : [
                   { "type": ["char", "size=1,1"], "purpose": "cell element 1 is a character" },
                   { "type": ["double", "size=N,N"], "purpose": "cell element 2 is a square matrix" },
                   { "type": "char", "purpose": "cell element 3 is a string" }
           ]
       },
       "organize": {
           "inputs": [
               {
                   "name": "data",
                   "type": ["cell:cell_het_mydata","size=3,1"],
                   "purpose": "heterogenous cell array"
               }
           ],
           "outputs": [
               {
                   "name": "numerator",
                   "type": "double",
                   "purpose": "result of function"
               }
           ]
       }
   }

另请参阅

主题