jsonapi-serializer, 用于( e ) 序列化数据到 JSON API的node.js 框架不可知库

分享于 

12分钟阅读

GitHub

  繁體 雙語
A Node.js framework agnostic library for serializing your data to JSON API
  • 源代码名称:jsonapi-serializer
  • 源代码网址:http://www.github.com/SeyZ/jsonapi-serializer
  • jsonapi-serializer源代码文档
  • jsonapi-serializer源代码下载
  • Git URL:
    git://www.github.com/SeyZ/jsonapi-serializer.git
    Git Clone代码到本地:
    git clone http://www.github.com/SeyZ/jsonapi-serializer
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/SeyZ/jsonapi-serializer
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    JSON API序列化程序

    JSONAPI Serializer Logo

    Build Statusnpm versiondownload

    用于将数据序列化为的node.js 框架不可知库。

    安装

    $ npm install jsonapi-serializer

    文档

    命令行序列化

    
    var JSONAPISerializer = require('jsonapi-serializer').Serializer;
    
    
    new JSONAPISerializer(type, opts).serialize(data);
    
    
    
    

    函数 JSONAPISerializer 采用两个参数:

    • type: 资源类型。
    • opts: 序列化选项。

    在返回的对象上调用 serialize 方法将把你的data ( 对象或者 array ) 序列化为兼容的JSONAPI文档。

    可用的序列化选项( opts 参数)
    • 属性: 要显示的属性的一个 array。 如果你想定义某些关系,可以将属性定义为选项。
      • ref: 如果存在,则将它的视为关系。
      • 包括: 将关系视为复合文档。 默认值:true。
      • id: 配置资源的标识符字段。 默认值:id
      • 属性: 要显示的属性的一个 array。
      • topLevelLinks: 描述顶层链接的对象。 值可以是字符串,字符串值,也可以是用户定义函数。
      • 链接链接 : 描述链接的数据。 值可以是字符串,字符串值,也可以是非字符串
      • dataMeta: 描述元 inside 数据的对象。 值可以是一个普通值,也可以是一个值
      • relationshipLinks: 描述 inside 关系的对象。 值可以是字符串,字符串值,也可以是用户定义函数。
      • relationshipMeta: 描述元 inside 关系的对象。 值可以是一个普通值,也可以是一个用户定义函数值。
      • ignoreRelationshipData: 不要将 data 键 inside 包含在关系中。 默认值:false。
      • keyForAttribute: 用于自定义属性的函数或者字符串。 函数作为单个参数传递,并期望返回一个字符串。 字符串是常见案例转换的内置函数的别名。 选项包括:dash-case ( 默认值)。lisp-casespinal-casekebab-caseunderscore_casesnake_casecamelCasecamelCase
      • nullIfMissing: 如果数据输入丢失,则将属性设置为 null。 默认值:false。
      • pluralizeType: 表示该类型是否必须为多元的布尔值。 默认值:true。
      • typeForAttribute: 将属性( 作为参数传递) 映射到要重写的类型的函数。 如果它返回 undefined,则忽略该属性的标志。 选项 pluralizeType 如果设置,则忽略。
      • : 包含非标准元信息的对象。 值可以是一个普通值,也可以是一个用户定义函数值。
      • 转换: 在序列化之前转换每个记录的函数。

    范例

    的简单用法:

    var data = [
     { id:1, firstName:'Sandro', lastName:'Munda' },
     { id:2, firstName:'John', lastName:'Doe' }
    ];
    var JSONAPISerializer =require('jsonapi-serializer').Serializer;var UserSerializer =newJSONAPISerializer('users', {
     attributes: ['firstName', 'lastName']
    });var users =UserSerializer.serialize(data);// `users` here are JSON API compliant.

    结果将类似于:

    {
     "data": [{
     "type":"users",
     "id":"1",
     "attributes": {
     "first-name":"Sandro",
     "last-name":"Munda" }
     }, {
     "type":"users",
     "id":"2",
     "attributes": {
     "first-name":"John",
     "last-name":"Doe" }
     }]
    }

    反序列化

    
    var JSONAPIDeserializer = require('jsonapi-serializer').Deserializer;
    
    
    new JSONAPIDeserializer(opts).deserialize(data);
    
    
    
    

    函数 JSONAPIDeserializer 采用一个参数:

    • opts: 反序列化程序选项。

    对返回的对象调用 deserialize 方法将把你的data ( JSONAPI文档) 反序列化为纯javascript对象。

    可用反序列化选项( opts 参数)
    • keyForAttribute: 用于自定义属性的函数或者字符串。 函数作为单个参数传递,并期望返回一个字符串。 字符串是常见案例转换的内置函数的别名。 选项包括:dash-case ( 默认值)。lisp-casespinal-casekebab-caseunderscore_casesnake_casecamelCasecamelCase
    • AN_ATTRIBUTE_TYPE: 这个选项名对应于JSONAPI文档中的关系的类型。
      • 英镑 valueForRelationship: 一个函数,返回你想要的关系( 请参阅下面的示例) 可以返回 Promise ( 请参见测试)
      • 转换: 在反序列化后转换每个记录的函数。

    范例

    的简单用法:

    
    {
    
    
     data: [{
    
    
     type: 'users',
    
    
     id: '1',
    
    
     attributes: {
    
    
     'first-name': Sandro,
    
    
     'last-name': Munda
    
    
     }
    
    
     }, {
    
    
     type: 'users',
    
    
     id: '2',
    
    
     attributes: {
    
    
     'first-name': 'John',
    
    
     'last-name': 'Doe'
    
    
     }
    
    
     }]
    
    
    }
    
    
    
    
    var JSONAPIDeserializer =require('jsonapi-serializer').Deserializer;newJSONAPIDeserializer().deserialize(jsonapi, function (err, users) {
     // `users` is...});
    [
     { id:1, firstName:'Sandro', lastName:'Munda' },
     { id:2, firstName:'John', lastName:'Doe' }
    ];

    关系:

    
    {
    
    
     data: [{
    
    
     type: 'users',
    
    
     id: '54735750e16638ba1eee59cb',
    
    
     attributes: {
    
    
     'first-name': 'Sandro',
    
    
     'last-name': 'Munda'
    
    
     },
    
    
     relationships: {
    
    
     address: {
    
    
     data: { type: 'addresses', id: '54735722e16620ba1eee36af' }
    
    
     }
    
    
     }
    
    
     }, {
    
    
     type: 'users',
    
    
     id: '5490143e69e49d0c8f9fc6bc',
    
    
     attributes: {
    
    
     'first-name': 'Lawrence',
    
    
     'last-name': 'Bennett'
    
    
     },
    
    
     relationships: {
    
    
     address: {
    
    
     data: { type: 'addresses', id: '54735697e16624ba1eee36bf' }
    
    
     }
    
    
     }
    
    
     }]
    
    
    }
    
    
    
    
    var JSONAPIDeserializer =require('jsonapi-serializer').Deserializer;newJSONAPIDeserializer({
     addresses: {
     valueForRelationship:function (relationship) {
     return {
     id:relationship.id,
     'address-line1':'406 Madison Court',
     'zip-code':'49426',
     country:'USA' };
     }
     }
    }).deserialize(jsonapi, function (err, users) {
     // `users` is...});
    
    [{
    
    
     id: '54735750e16638ba1eee59cb',
    
    
     'first-name': 'Sandro',
    
    
     'last-name': 'Munda',
    
    
     address: {
    
    
     id: '54735722e16620ba1eee36af',
    
    
     'address-line1': '406 Madison Court',
    
    
     'zip-code': '49426',
    
    
     country: 'USA'
    
    
     }
    
    
    }, {
    
    
     id: '5490143e69e49d0c8f9fc6bc',
    
    
     'first-name': 'Lawrence',
    
    
     'last-name': 'Bennett',
    
    
     address: {
    
    
     id: '54735697e16624ba1eee36bf',
    
    
     'address-line1': '406 Madison Court',
    
    
     'zip-code': '49426',
    
    
     country: 'USA'
    
    
     }
    
    
    }]
    
    
    
    
    承诺

    反序列化选项 valueForRelationship 支持返回 Promise,因此这个库在幕后使用 Promisesbluebird 以前被用作依赖项,但由于 node 和web上的包大小关注,因这里它被替换为本机承诺。

    bluebird 绝对比原生承诺更具有性能。 如果性能是一个主要问题,Promise 可以是全局 polyfilled

    • node - 通过 global.Promise = require('bluebird')
    • web - 在使用脚本标记加载 bluebird 时自动分配 global Promise

    错误序列化

    
    var JSONAPIError = require('jsonapi-serializer').Error;
    
    
    var error = new JSONAPIError(opts);
    
    
    
    

    函数JSONAPIError采用一个参数:

    • opts: 错误选项所有选项都是可选的。
    可用错误选项( opts 参数)
    • id:: 这个问题发生的唯一标识符。
    • 状态: 适用于这个问题的HTTP状态代码,用字符串值表示。
    • 代码: 应用程序特定的错误代码,以字符串值表示。
    • 标题: 一个简短的人类可读的问题摘要,不应该发生在出现问题的情况下,除了本地化目的。
    • 详细 detail: 特定于这里问题发生的人类阅读说明。 标题一样,字段的此值可以本地化。
    • : 对象包含对错误源的引用,可以选择包括以下任何成员:
      • 指针: 请求文档[ 中关联实体的一个JSON指针 [RFC6901]。 "/数据for主要数据对象的数据,或者用于特定attribute]的"/data/attributes/title"。
      • 参数: 指示哪个URI查询参数导致错误的字符串。
    • 链接: 包含以下成员的链接对象:
      • :一个链接,指向关于这个问题发生的更详细的细节。
    • : 包含错误的非标准元信息的元对象。

    范例

    的简单用法:

    var JSONAPIError =require('jsonapi-serializer').Error;var errors =newJSONAPIError({
     code:'123',
     source: { 'pointer':'/data/attributes/first-name' },
     title:'Value is too short',
     detail:'First name must contain at least three characters.'});// `errors` here are JSON API compliant.

    结果将类似于:

    {
     "errors": [
     {
     "code":"123",
     "source": { "pointer":"/data/attributes/first-name" },
     "title":"Value is too short",
     "detail":"First name must contain at least three characters." }
     ]
    }
    许可证


    相关文章