小编tsc*_*wab的帖子

HTTP SEARCH 方法是否标准化?

我正在考虑如何实现用于搜索的 REST API 端点。在我看来,对于如何实现搜索选项,我有四种选择,每种都有优点和缺点:

  1. 使用带有查询字符串参数的 GET 端点
  2. 使用带有负载的 GET 端点(例如,JSON 负载)
  3. 使用带有负载的 POST 端点
  4. 使用带有负载的 SEARCH 端点

为了完整起见,以下是我想到的优点和缺点:

  • 带有查询字符串参数的 GET 端点
    • Pro - 动词准确,符合标准
    • 缺点 - 有限的选项结构(仅限键/值)和 URL 大小限制
  • 带有有效负载的 GET 端点(例如,JSON 有效负载)
    • Pro - 动词准确,无大小限制
    • 缺点 - HTTP 规范表示 GET 请求没有有意义的有效负载,并且某些框架可能不支持它(相关问题
  • 带有有效负载的 POST 端点
    • Pro - 符合标准,无尺寸限制
    • 缺点 - 搜索是幂等的,而 POST 则不是。基本上,这是一个错误的动词。
  • 带有有效负载的搜索端点
    • Pro - 动词准确,无大小限制
    • 缺点 - 是一个晦涩的(非标准的?)HTTP 动词

可以就其中哪一个最好进行冗长、细致和固执己见的讨论,但这种讨论不是这个问题的目的。相反,我会问:SEARCH 动词只是晦涩难懂且很少使用,但仍然是官方方法,还是非标准?

我找到了该方法的草案,但没有更多关于它的官方文档。该草案呼应了我上面提出的四难困境中的一些要点。在我看来,该方法仍然只是一个草案,不能称为“标准”,尽管我不太熟悉如何阅读这些文档。

从功能上来说,我想我的问题是:我可以依靠自称符合标准的软件来处理 SEARCH 方法吗?如果他们不处理,我可以诉诸他们声称符合标准来迫使他们处理吗?进一步归结起来,它是一个可靠的动词吗?

search specifications http

13
推荐指数
1
解决办法
6782
查看次数

Sinatra使用websocket客户端来响应http请求

我正在编写一个我想成为RESTful的Sinatra Web服务器,但问题是它必须与另一个通过Web套接字进行通信的服务器进行交互.所以,这需要发生:

  1. 请求从客户端进入我的Sinatra服务器
  2. 我的服务器打开外部服务器的Web套接字
  3. 我的服务器异步等待来自外部服务器的消息和东西,直到套接字关闭(这应该只需要大约200毫秒)
  4. 我的服务器向客户端发回响应

我确信这不是太复杂,但我有点卡在上面.基本上,如果整个Web套接字逻辑可以包装在单个函数中,那么该函数可以被阻塞,那就是那样.但我不知道如何包装Web套接字逻辑并阻止它.你怎么看?我所得到的简化版本如下.

require 'sinatra'
require 'websocket-client-simple'

get '/' do
     ws = WebSocket::Client::Simple.connect(' ws://URL... ')

     ws.on :message do
          puts 'bar'
     end

     ws.on :close do
          # At this point we need to send an HTTP response back to the client. But how?
     end

     ws.on :open do
          ws.send 'foo'
     end

end
Run Code Online (Sandbox Code Playgroud)

编辑

经过深思熟虑后,我意识到这可以通过线程停止和线程唤醒来实现.这感觉相当复杂,我不知道如何正确地使用Ruby,但这是一个想法:

require 'sinatra'
require 'websocket-client-simple'

get '/' do
    socketResponse('wss:// ... URL ...')

    'Got a response from the web socket server!'
end

def socketResponse(url)
    thread = Thread.new …
Run Code Online (Sandbox Code Playgroud)

rest asynchronous thin sinatra websocket

9
推荐指数
1
解决办法
458
查看次数

Scrapy 不启用我的 FilePipeline

这是我的settings.py:

from scrapy.log import INFO


BOT_NAME = 'images'

SPIDER_MODULES = ['images.spiders']
NEWSPIDER_MODULE = 'images.spiders'
LOG_LEVEL = INFO

ITEM_PIPELINES = {
    "images.pipelines.WritePipeline": 800
}

DOWNLOAD_DELAY = 0.5
Run Code Online (Sandbox Code Playgroud)

这是我的pipelines.py:

from scrapy import Request
from scrapy.pipelines.files import FilesPipeline


class WritePipeline(FilesPipeline):

    def get_media_requests(self, item, info):
        for url in item["file_urls"]:
            yield Request(url)

    def item_completed(self, results, item, info):
        return item
Run Code Online (Sandbox Code Playgroud)

这是非常标准的,正常的东西。然而这是我的日志中的一行:

2015-06-25 18:16:41 [scrapy] INFO: Enabled item pipelines: 
Run Code Online (Sandbox Code Playgroud)

So the pipeline is not enabled. What am I doing wrong here? I've used Scrapy a few times …

python pipeline file download scrapy

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

验证 Shopify webhook

我相信要将 Shopify webhook 与 Rails 应用程序集成,Rails 应用程序需要禁用默认verify_authenticity_token方法,并使用标头实现自己的身份验证X_SHOPIFY_HMAC_SHA256Shopify 文档说只使用request.body.read. 所以,我这样做了:

def create
    verify_webhook(request)

    # Send back a 200 OK response
    head :ok
end

def verify_webhook(request)
    header_hmac = request.headers["HTTP_X_SHOPIFY_HMAC_SHA256"]
    digest = OpenSSL::Digest.new("sha256")
    request.body.rewind
    calculated_hmac = Base64.encode64(OpenSSL::HMAC.digest(digest, SHARED_SECRET, request.body.read)).strip

    puts "header hmac: #{header_hmac}"
    puts "calculated hmac: #{calculated_hmac}"

    puts "Verified:#{ActiveSupport::SecurityUtils.secure_compare(calculated_hmac, header_hmac)}"
end
Run Code Online (Sandbox Code Playgroud)

Shopify Webhook 定向到正确的 URL,并且路由将其提供给上面显示的控制器方法。但是当我发送测试通知时,输出不正确。两个HMAC不相等,因此未验证。我相当确定问题在于 Shopify 使用整个请求作为身份验证哈希的种子,而不仅仅是 POST 内容。所以,我需要原始的、未受影响的 HTTP 请求,除非我弄错了。

经过至少一个小时的搜索后,这个问题似乎是互联网上唯一有希望的问题。这正是我要问的,并且得到了 30 票赞成的接受答案。但他的回答……很荒谬。它吐出各种难以理解的、乱码的东西。我错过了一些明显的东西吗?

此外,这篇文章似乎表明我正在寻找的东西是不可能的。似乎 Rails 从未收到过纯粹的请求,但在到达 Rails 之前,Rack …

ruby-on-rails http http-post webhooks shopify

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