标签: jsend

Ruby Grape JSON-over-HTTP API,自定义JSON表示

我有一个小型的原型子类Grape::API作为机架服务,并Grape::Entity用于呈现我的应用程序的内部对象.

我喜欢Grape::EntityDSL,但我很难找到我应该超越默认的JSON表示,这对我们来说太轻了.我被要求以"jsend或类似"格式生成输出:http://labs.omniti.com/labs/jsend

我完全不确定改变的性质与Grape框架最相符(我想在这里采用最小阻力路径).我应该创建一个自定义的Grape格式化程序(我不知道如何做到这一点),新的机架中间件(我这样做是为了通过SysLog记录API输入/输出 - 但格式化似乎很糟糕,因为我需要解析正文从JSON返回以添加容器级别),或者更改Grape::Entity为例如RABL?

示例代码("app.rb")

require "grape"
require "grape-entity"

class Thing
  def initialize llama_name
    @llama_name = llama_name
  end
  attr_reader :llama_name
end

class ThingPresenter < Grape::Entity
  expose :llama_name
end

class MainService < Grape::API
  prefix      'api'
  version     'v2'
  format      :json
  rescue_from :all

  resource :thing do
    get do
      thing = Thing.new 'Henry'
      present thing, :with => ThingPresenter
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

Rackup文件("config.ru")

require File.join(File.dirname(__FILE__), "app")
run MainService
Run Code Online (Sandbox Code Playgroud)

我启动它:

rackup -p 8090 …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-grape jsend

10
推荐指数
1
解决办法
6739
查看次数

如何捕获由tymondesigns/jwt-auth包生成的laravel 5中的全局异常?

我正在使用Laravel 5处理RESTful应用程序,我正在尝试捕获异常并生成适当的响应.我也在使用tymondesigns/jwt-auth包,所以所有的API响应都是JSend JSON格式.

现在我正试图抓住TokenExpiredException当给定令牌过期时出现的情况.所以我尝试了这个Handler.php:

if($e instanceof TokenExpiredException)
{
    return jsend()->error()
          ->message("Token Expired")
          ->code(403)
          ->data([null])
          ->get();
}
Run Code Online (Sandbox Code Playgroud)

但我仍然无法捕获此异常并返回JSON响应.虽然我可以为其他例外执行此操作,例如:

if ($e instanceof ModelNotFoundException) {
    $e = new NotFoundHttpException($e->getMessage(), $e);

    return jsend()->error()
              ->message("404 Model Not Found")
              ->data([null])
              ->get();
}
Run Code Online (Sandbox Code Playgroud)

和:

if ($this->isHttpException($e))
{       
    if($e instanceof NotFoundHttpException)
    {
        return jsend()->error()
              ->message("404 Route Not Found")
              ->data([null])
              ->get();
    }
    return $this->renderHttpException($e);
}
Run Code Online (Sandbox Code Playgroud)

如何处理Laravel中的其他异常?

php exception-handling laravel laravel-5 jsend

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

在 JSend 规范中,失败和错误有什么区别?

根据https://labs.omniti.com/labs/jsend

  • 失败:当 API 调用因无效数据或调用条件而被拒绝时
  • 错误:当 API 调用因服务器错误而失败时

这是否可以解释为 4xx 错误(例如 404)应始终返回失败,但 5xx 错误始终对应于错误?

rest json jsend

3
推荐指数
1
解决办法
1663
查看次数

标签 统计

jsend ×3

exception-handling ×1

json ×1

laravel ×1

laravel-5 ×1

php ×1

rest ×1

ruby ×1

ruby-grape ×1