标签: json-api

Rails 4要求和允许多个

很长一段时间的Java开发人员 - ror的新手 - 我在Rails 4中构建了一个JSON REST API,我遇到了使用强参数的问题.当我对我的一个端点执行HTTP POST请求时,我希望我的控制器需要主对象,需要它的一些属性,如果存在某些其他属性,它也会返回它们.看到那些需要和允许方法返回哈希,我想知道什么是允许和要求同一对象的某些属性的最佳实践.我应该合并两个哈希吗?非常感谢您的投入,因为我花了很多时间研究这个问题.

ruby rest ruby-on-rails strong-parameters json-api

7
推荐指数
1
解决办法
6130
查看次数

在Rails JSON API中使用Devise for Omniauth一次性代码流

我目前正在为Rails实现一个JSON API,以便为Android移动应用提供服务,这需要进行Google身份验证.

我希望的流程是Google API OAuth2的一次性代码流(混合身份验证),如omn​​iauth-google-oauth gem中所述.简而言之,Android应用从Google帐户的服务器获取一次性代码并将其交给Rails API操作,该操作将其转换为访问令牌,然后使用它来获取用户的个人资料信息.

考虑到这一点,我有两个关于Rails中的Devise omniauth实现的问题:

  1. 我发现在omn​​iauth-google-oauth gem的文档中已经描述了Javascript的一次性代码客户端流程实现.但是,Devise通过将用户重定向到新的注册页面来处理授权失败,并且回调阶段需要一组我没有文档的参数.Devise是否支持JSON API的此类流程?如果是这样,应该如何处理?

  2. 我注意到有一种触发器可以启动omniauth的回调阶段,如下所示.问题是,当我将omniauth的path_prefix更改为/ users/auth /的其他内容时,当我对回调URL发出POST请求时,不会触发此操作.Devise/Omniauth使用什么标准来触发此触发器?

    INFO - omniauth :( google_oauth2)已启动回调阶段.

作为参考,我使用Rails 4.1.6与Ruby 2.1.3和Devise 3.2.4.

我非常感谢你的帮助!

ruby-on-rails devise omniauth google-oauth json-api

6
推荐指数
0
解决办法
516
查看次数

Swagger 2.0中的JSON API示例

我正在尝试使用Swagger 2.0为端点创建示例响应.

    200:
      description: Successful response
      schema:
        type: object
        $ref: "#/definitions/User"
      examples:
        application/vnd.api+json:
            - data:
                attributes:
                  full_name: John Appleseed
            - data:
                attributes:
                  full_name: Mike Appleseed
Run Code Online (Sandbox Code Playgroud)

我的api消耗和产生application/vnd.api+json,但它不会识别它.如果我删除这些示例,我的规范就可以了.知道如何指定吗?

错误

swagger json-api swagger-2.0

6
推荐指数
1
解决办法
1万
查看次数

JSON API响应和ember模型名称

关于JSON API响应键"类型"与Ember模型名称匹配的快速问题.

如果我有一个模型,说"models/photo.js",我有一个像"/ photos"的路线,我的JSON API响应看起来像这样

{
  data: [{
    id: "298486374",
    type: "photos",
    attributes: {
      name: "photo_name_1.png",
      description: "A photo!"
    }
  },{
    id: "298434523",
    type: "photos",
    attributes: {
      name: "photo_name_2.png",
      description: "Another photo!"
    }
  }]
}
Run Code Online (Sandbox Code Playgroud)

我假设我的模型名称应该是单数但是会弹出这个错误

Assertion Failed: You tried to push data with a type 'photos' but no model could be found with that name
Run Code Online (Sandbox Code Playgroud)

当然,这是因为我的模型被命名为"照片"

现在,在JSON API规范中,有一条注释"此规范与变形规则无关,因此type的值可以是复数或单数.但是,在整个实现中应始终使用相同的值."

所以,

tl; dr服务器的"Ember方式"是否具有模型名称和JSON API响应键"类型"都是单数的?或者只要匹配就没关系?

ember.js ember-data json-api

6
推荐指数
1
解决办法
1856
查看次数

Ember.js:如何从store.findRecord调用访问JSON API元数据

我目前正试图弄清楚如何在使用store.findRecord()呼叫时访问元数据.

在指南(http://guides.emberjs.com/v2.1.0/models/handling-metadata/)中,它表示可以通过执行以下操作来访问元数据:

store.query('post').then((result) => {
  let meta = result.get('meta');
})
Run Code Online (Sandbox Code Playgroud)

我希望这会利用工作时findRecord

store.findRecord('book', params.id, {adapterOptions: {query: params}}).then((result) => {
    let meta = result.get('meta');
})
Run Code Online (Sandbox Code Playgroud)

但是,这始终为meta属性返回undefined .我假设在使用时没有设置元数据findRecord.我返回有效的JSON-API meta,其顶级属性如下:

{
  "meta": {
    "page": {
      "number": 1,
      "size": 100,
      "total": 20
    },
   "data":[
       // data here
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用findRecord()和JSONAPISerializer和JSONAPIAdapters时访问服务器返回的元数据?

谢谢!

我使用以下版本:

Ember             : 2.1.0
Ember Data        : 2.1.0
jQuery            : 1.11.3
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data json-api

6
推荐指数
1
解决办法
1829
查看次数

JSON模式枚举与单值的模式

我有一个示例json:

{
    "type": "persons",
    "id": 2,
    "attributes": {
        "first": "something",
        "second": "something else"
    }
}
Run Code Online (Sandbox Code Playgroud)

我必须为它制作一个模式(使用JSON API规范JSON模式文档):

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "type": "object",
    "properties": {
        "type": {
            "type": "string",
            "pattern": "^persons$"
        },
        "id": {
            "type": "integer"
        },
        "attributes": {
            "type": "object",
            "properties": {...}
        }
    },
    "required": ["type", "id", "attributes"]
}
Run Code Online (Sandbox Code Playgroud)

问题是:如果"类型"唯一可接受的值是"人",我应该使用模式模式(如上所述)还是枚举类似

"enum": ["persons"]
Run Code Online (Sandbox Code Playgroud)

我无法从文档中得到任何明确的答案,尽管在规范枚举中的示例用于单个值.你有什么看法?

enums json jsonschema json-api

6
推荐指数
2
解决办法
3301
查看次数

调用 ember 数据的 destroyRecord() 时如何从 json-api 服务器的 200 响应中访问顶级元键

我正在开发一个使用 Ember Data 和现在默认的 json-api 适配器的 Ember 应用程序。

根据 json-api 规范 ( http://jsonapi.org/format/#crud-deleting ),删除记录时,200如果删除成功,服务器应返回响应,并且服务器仅使用顶级meta密钥进行响应。

我当前的服务器就是这样做的,我试图弄清楚在使用 Ember Data 的model.destroyRecord()方法时如何访问顶级元对象中的数据。

myModel.destroyRecord().then(function(model){
    // the returned value is the model.  How can I get the actual metadata 
    // returned by the server?   
});
Run Code Online (Sandbox Code Playgroud)

服务器响应包含有关确切删除内容的信息,如下所示:

{
   "meta": {
      num-deleted-a: 10,
      num-deleted-b: 100,
      num-deleted-c: 200
    }
}
Run Code Online (Sandbox Code Playgroud)

我想获取此信息,以便将其显示给用户。

谢谢!

我正在使用以下版本:

Ember             : 2.2.0
Ember Data        : 2.3.3
jQuery            : 1.11.3
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data json-api

6
推荐指数
1
解决办法
887
查看次数

Laravel Fractal不会从包含关系中返回元

这是我PostTransformer加入关系的地方

public function includeComments(Post $post)
{
    if (($post->is_paid == 1 && $post->haspaid == 1) || ($post->author == $this->params) || ($post->is_paid == 0)){
        $comments = Comment::where('post', $post->id)
            ->where('is_blocked', '=', 0)
            ->select('id',
                'text',
                'author',
                'post',
                'created_at',
                'updated_at',
                'book_id',
                DB::raw("if(comments.author=$this->params,'true','false') as isauthor"))
            ->orderBy('created_at', 'ASC')
            ->paginate(5);
        $commentTransformer = new CommentTransformer($this->params);
        $commentResource = $this->collection($comments, $commentTransformer, 'comment')->setMeta(['total'=>count($comments)]);
        return $commentResource;
    } elseif ($post->is_paid == 1 && $post->haspaid == 0) {
        return $this->null();
    }

}
Run Code Online (Sandbox Code Playgroud)

这应该与meta的评论关系产生.但这里的问题是我没有得到包含关系的meta.如果有人可以帮我解决这个问题.

php json-api laravel-5.3 thephpleague thephpleague-fractal

6
推荐指数
1
解决办法
391
查看次数

获取Rails 5应用程序以返回JSON API格式

我正在尝试让我的应用程序以小写的camelcase返回以进行最终的JSON API格式化.

我安装gem 'active_model_serializers'并创建了一个新的初始化程序,其中包含以下代码:

ActiveModelSerializers.config.adapter = :json_api
ActiveModelSerializers.config.key_transform = :camel_lower
Run Code Online (Sandbox Code Playgroud)

然后我有一个返回json的小API,就像所有最好的互联网应用程序一样:

class Api::V1::UsersController < API::V1::BaseController
  def sky
      @user = User.find_by_id(params[:user_id])

      if @user
          obj =  {
              sky: {
                  sectors: @user.sectors,
                  slots: @user.slots
              }
          }

          render json: obj
      else
          raise "Unable to get Sky"
      end
  end
Run Code Online (Sandbox Code Playgroud)

有关API控制器继承模式的更多信息: class API::V1::BaseController < ActionController::Base

问题

在我的API响应中,事情仍然是蛇形的,我在控制台中看到了这个错误,[active_model_serializers] Rendered ActiveModel::Serializer::Null但是我的研究让我陷入了死胡同.

任何建议都会非常受欢迎.谢谢!

ruby-on-rails active-model-serializers json-api

6
推荐指数
1
解决办法
1104
查看次数

OpenAPI 与 JSON:API

我找不到有关JSON:APIOpenAPI之间用例差异的任何资源

根据我的理解,JSON:API 更侧重于业务数据,而 OpenAPI 更侧重于 REST 本身?

任何指针都会很棒,谢谢!

api rest json-api openapi

6
推荐指数
2
解决办法
1593
查看次数