小编Nei*_*ter的帖子

带有链接的REST资源表示,与PUT和GET兼容

我被要求设计和实现RESTful API,并且一直在研究最佳实践,但到目前为止,只有一个关于资源表示的愚蠢概念.我发现的大多数可用示例似乎都非常关注使用一系列GET来连接结构的API客户端.

我看过:

http://www.restapitutorial.com/media/RESTful_Best_Practices-v1_1.pdf

http://www.youtube.com/watch?v=HW9wWZHWhnI

在其他在线资源(我限于2个链接抱歉不能列出所有).它们都很棒,但并没有真正解决我的设计问题.

大多数最佳实践文档都提出了两件让我看起来有点冲突的事情:

1)REST服务应将数据关系表示为资源之间的链接

2)来自客户端的"PUT"请求应该是完整的表示,形式与服务器上看到的表示形式相同.

从我的观点来看,问题在于链接以及典型资源中的其他一些属性是只读的,因此无法更新.该服务器可以预期它们按原样运行,如果它认为客户端正在尝试更新它们,则会返回错误.事实上,当我查看JSON中表示的典型资源时,其中大部分是逻辑上不能/不应该替换的数据.例如

{
 "link": { "rel":"self", "href":"http://example/project/12345" },
 "team": {
    "link": { "rel":"self", "href":"http://example/project/12345/team" },
    "title": "The project team"
  },
  "title": "The Big Project"
}
Run Code Online (Sandbox Code Playgroud)

在这里,最多只有两个标题文本可以写入该资源上的客户端(团队成员资格可以通过团队链接进行更改).

因此,我是否应该要求PUT完全按原样包含所有"链接"元素,这些元素纯粹是逻辑和只读的(注意在示例中,团队无法重新链接,因为资源将其定义为团队对于项目 - 在这种情况下可以改变,但对于许多具有更严格的集装箱船的资源类型,这不适用)?

是否有标准模式或反模式用于在REST中表示具有许多链接的资源?我没有被要求提供特定的REST变体,例如HATEOAS,尽管我倾向于在可能的情况下瞄准理论上的"正确性".换句话说,如果"官方"REST将期望客户端将整个资源,链接和所有内容投入,那么这可能就是我要做的.

支持GET和PUT的现实世界复杂的非叶子REST资源的一些示例,因此必须处理这个问题,将非常感激.当我搜索时,我得到了很多意见,并且很多例子显示了GET的工作原理...但到目前为止,我还没有看到一个记录良好的示例,显示PUT除了一个简单的叶子资源(即一个不包含任何链接,除了自我引用之外).

api rest

5
推荐指数
1
解决办法
2200
查看次数

Gemspec失败了

我正在为我的毕业最终项目开发一个创业板,而Travis CI的建设却在不断失败.

这是我在特拉维斯的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218

构建错误是:

$ bundle exec rake
rake aborted!
Don't know how to build task 'default'
/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `eval'
/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in `<main>'
(See full trace by running task with --trace)
The command "bundle exec rake" exited with 1.
Done. Your build exited with 1.
Run Code Online (Sandbox Code Playgroud)

以下是我的 perpetuus.gemspec

# coding: utf-8
lib = File.expand_path('../lib', __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require 'perpetuus/version'

Gem::Specification.new do |spec|
  spec.name          = "perpetuus"
  spec.version       = Perpetuus::VERSION
  spec.authors       = ["Ricardo Caldeira"]
  spec.email         = ["ricardo.nezz@gmail.com"]
  spec.description   = %q{A continuous …
Run Code Online (Sandbox Code Playgroud)

ruby gem rubygems

5
推荐指数
1
解决办法
1074
查看次数

ImageMagick不能使用JPEG(OSX/X11)?

尝试使用Mac OSX和自制软件给RMagick一个旋转.

版本:Mac OSX 10.7.5,HomeBrew 0.9.4.,Ruby 2.0,Rmagick 2.13.2,ImageMagick 6.8.6-3.

这是我的Ruby代码,名为rename.rb:

require 'RMagick'
include Magick

cat = ImageList.new("test.jpg")
cat.display
exit
Run Code Online (Sandbox Code Playgroud)

这是我的终端输出:

rename.rb:5:in `display': delegate library support not built-in `test.jpg' (X11) @ error/display.c/DisplayImages/16067 (Magick::ImageMagickError)
    from rename.rb:5:in `<main>'
Run Code Online (Sandbox Code Playgroud)

虽然我已经安装了适当的代理(但我不完全确定,因为我在ImageMagick中是一个n00b).如果我跑convert -list configure,我得到这个:

...
DELEGATES      bzlib fontconfig freetype jng jpeg png rsvg tiff xml zlib
...
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

ruby homebrew rmagick imagemagick

4
推荐指数
1
解决办法
2677
查看次数

如何跨多个Pull请求并行运行持续集成?

我正在测试使用Jenkins和Github拉请求构建器插件我已经成功地在Github上设置了一个玩具项目并开发了Jenkins,以便提升PR,或者将更改推送到PR分支触发构建.大多数情况下,这可以按要求工作 - 有些东西与首选工作流程不匹配,但是不必编写和维护我们自己的插件是一件大事.

我有一个潜在的showstopper.该插件将它看到的所有PR中的所有推送排队,并且每次似乎只运行一个作业,即使有可用的备用执行程序也是如此.在现实世界项目中,我们可能有10个活跃的PR,每个可能在一天内获得一些推送更新以响应QC评论,并且完整的CI运行需要> 30分钟.但是,我们确实有足够的构建执行程序可以同时运行多个作业.

我看不到任何方法来配置PR请求构建器在同一个触发器上一次处理多个作业,但我可能会遗漏Jenkins其他地方的基本内容.有没有办法做到这一点,而无需自定义插件?

我已经安装了Jenkins ver.1.649在新的Ubuntu 14.04服务器上(在VirtualBox客户端上)并遵循ghprb插件中的README (当前版本1.30.5),包括在Github上设置jenkins"bot"帐户作为协作者来运行所有集成API调用到Github.

我想知道如果克隆工作会产生什么行为(创建新项目和"复制现有项目"),并且可能会尝试下一步,但我希望这会导致同一个工作被多次运行而没有任何好处,相反与其他轮询同一个PR池的工作巧妙地进行交互.

github jenkins jenkins-plugins

4
推荐指数
1
解决办法
1123
查看次数

TensorFlow中的二进制分类,意外的大损失和准确值

我试图使用深度神经网络架构来对二进制标签值-1和+1进行分类.这是我的代码tensorflow.

import tensorflow as tf
import numpy as np
from preprocess import create_feature_sets_and_labels

train_x,train_y,test_x,test_y = create_feature_sets_and_labels()

x = tf.placeholder('float', [None, 5])
y = tf.placeholder('float')

n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500

n_classes = 1
batch_size = 100

def neural_network_model(data):

    hidden_1_layer = {'weights':tf.Variable(tf.random_normal([5, n_nodes_hl1])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}

    hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}

    hidden_3_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])),
                      'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}

    output_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl3, n_classes])),
                      'biases':tf.Variable(tf.random_normal([n_classes]))}


    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
    l2 = tf.nn.relu(l2)

    l3 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network logistic-regression tensorflow

4
推荐指数
1
解决办法
6941
查看次数

如何使用批处理文件,以便在完成时结果仍然可见

我运行批处理文件,然后立即退出.我不希望这种情况发生,以便我可以看到我的输出.有人能告诉我如何实现这一目标吗?

我用的是Windows 7.

windows command-line cmd batch-file command-prompt

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

Grape API修改参数存在错误

如您所知,您可以指定路由中需要参数,如下所示:

requires :province, :type => String

但是,我希望能够更改引发的错误,并在未给出参数时提供我自己的错误JSON.

我怎么能这么容易做到?猴子补丁我很好.

编辑:我在第191行看到rescue_from,看起来它可能会有所帮助,但我不知道如何使用它. https://codeclimate.com/github/intridea/grape/Grape::API

ruby rack ruby-grape grape-api

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

Ruby生成的makefile不运行

也许这是一个非常明显的答案,但我正在尝试在Windows环境中使用C扩展Ruby,并且当我运行mingw32时我无法进行扩展 - 使得它生成一个名为"forktest-i386-的文件" mingw32.def"然后说"没有规则来制作目标'ruby.h','forktest.o'需要".

Forktest是我想要扩展的名称.

makefile是由ruby自己的create_makefile命令生成的,它确实令人费解,所以我不能对它做头或者故事,但无论如何它在这里:

SHELL = /bin/sh

# V=0 quiet, V=1 verbose.  other values don't work.
V = 0
Q1 = $(V:1=)
Q = $(Q1:0=@)
n=$(NULLCMD)
ECHO1 = $(V:1=@$n)
ECHO = $(ECHO1:0=@echo)

#### Start of system configuration section. ####

srcdir = .
topdir = /D/Programs/Ruby193/include/ruby-1.9.1
hdrdir = /D/Programs/Ruby193/include/ruby-1.9.1
arch_hdrdir = D:/Programs/Ruby193/include/ruby-1.9.1/$(arch)
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby

DESTDIR = D:
prefix = $(DESTDIR)/Programs/Ruby193
rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
exec_prefix = $(prefix)
vendorhdrdir = $(rubyhdrdir)/vendor_ruby
sitehdrdir = $(rubyhdrdir)/site_ruby
rubyhdrdir = $(includedir)/$(RUBY_BASE_NAME)-$(ruby_version)
vendordir = $(rubylibprefix)/vendor_ruby …
Run Code Online (Sandbox Code Playgroud)

ruby makefile mingw32 ruby-c-extension

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

续集急切加载单个ORM对象的一些关联

我正在为一个小应用程序构建数据模型,并希望利用某些方法中的急切加载 - 即我事先知道某些关联将被使用的方法.

我已经阅读.eager方法的Sequel :: Model :: Association指南,但它让我有点困惑.一个典型的例子可能是:

Artist.eager( :albums => :tracks ).all
Run Code Online (Sandbox Code Playgroud)

它只使用三个查询加载所有Artist对象及其预加载的所有专辑字段,并预加载所有曲目.到现在为止还挺好.

但是说我想通过其主键加载一个艺术家,并且仍然预先加载了专辑+曲目(仍然有三个查询,可能比跟踪每个专辑的关联少很多)?我看不到任何这样的例子.一点点实验给了我

Artist.eager( :albums => :tracks ).where( :id => id ).all.first
Run Code Online (Sandbox Code Playgroud)

这似乎至少有效.我通过调用它确认了急切加载,然后关闭数据库,并显示我仍然可以访问关联.

但是,我觉得我错过了一些东西.构造,必须将主键传递给where子句,获得完整的数据集,然后要求第一项似乎很尴尬.我正在寻找这样的东西:

Artist.eager( :albums => :tracks )[ id ]
Run Code Online (Sandbox Code Playgroud)

...一种简单的方式来声明我想加载一个对象,并急切加载它的一些关联.

发现,我可以创建这样一个自定义的关联关系:

def eager_albums
  albums_dataset.eager( :tracks ).all
end
Run Code Online (Sandbox Code Playgroud)

但这很难使用,因为代码必须以不同的方式请求关联.

我的问题:我的构造是否Artist.eager( :albums => :tracks ).where( :id => id ).all.first按照我的想法在续集中做了,我可以做得更好(更简单的代码)吗?

ruby sequel

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

不匹配重音字符的大写字母的正则表达式

我是 ruby​​ 的新手,我正在尝试使用正则表达式。

我有一个看起来像这样的文字:

HEADING

Some text which is always non capitalized. Headings are always capitalized,     followed by a space or nothing more.

YOU CAN HAVE MULTIPLE WORDS IN HEADING
Run Code Online (Sandbox Code Playgroud)

我正在使用这个正则表达式来选择所有标题:

^[A-Z]{2,}\s?([A-Z]{2,}\s?)*$
Run Code Online (Sandbox Code Playgroud)

但是,它匹配所有不包含字符的标题,如 ?、Š、Ž(斯洛文尼亚字符)。

所以我猜 [AZ] 只匹配 ASCII 字符?我怎么能得到utf8?

ruby regex

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