小编das*_*tan的帖子

在同一URI上执行多个操作时的RESTful API

据我所知,RESTful API中使用了四种方法:

GET用于获取资源.用于更新资源的
POST.
PUT用于创建或替换资源.
DELETE用于删除资源.

假设我们有一个名为apple的资源,我们可以通过多种方式"更新"它.例如,削减它,切片,或使其成为苹果汁.
这三种不同的更新操作中的每一种都采用不同的参数,并且其API中的常见部分将是:

POST /apple HTTP/1.1
Host: www.example.com

<different combination of arguments>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,三个API共享相同的URI和相同的请求方法,它们的唯一区别是参数.我认为这迫使后端准备接受这些参数的联合集,并且为了区分实际请求的动作,后端需要检查参数的组合.它太复杂而且不优雅.

所以我的问题是:
在这个苹果案例中,如何设计出一套优雅的RESTful API,使后端可以轻松处理.

api rest

21
推荐指数
2
解决办法
2万
查看次数

C中〜0的值是多少?

我想要得到的价值INT_MININT_MAX,和我试过~0~0 >> 1,因为最左边的位为符号位.我得到了他们两个-1.

它太混乱了,为什么不~0成为0xffffffff~0 >> 1将来0x7fffffff

c bit-manipulation

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

dns在docker内部解析缓慢或超时

在主机上,查找域速度非常快.但是在docker容器内部,它会
慢得多,有时会超时.

主机是一个虚拟主机,它的DNS服务器地址是127.0.0.1(奇怪但是真实).所以我试图修改容器内的/etc/resolv.conf并将dns服务器设置为172.x(主机的地址).结果,我没有看到任何好的效果.

我也尝试将容器的dns服务器设置为自构建的服务器(101.x),但是,查找域名的速度很慢.另一个奇怪的事情是ping 101.x非常快.

我对这种现象感到困惑,有谁能解释和帮助?

dns docker

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

为什么ARP请求一个非本地地址?

我有一个带有2个NIC的Linux虚拟服务器。

eth0 <IP1>
eth1 <IP2>
Run Code Online (Sandbox Code Playgroud)

arp_filter打开并rp_filter设置为2(宽松模式)。
策略路由配置如下:

table T1
default via <GW> dev eth0 src <IP1>
127.0.0.0/8 dev lo
<LAN> dev eth0 src <IP1>

table T2
default via <GW> dev eth1 src <IP2>
127.0.0.0/8 dev lo
<LAN> dev eth1 src <IP2>

ip rule add from <IP1> table T1
ip rule add from <IP2> table T2
Run Code Online (Sandbox Code Playgroud)

在那之后,我可以ping二者结合的floatingips <IP1><IP2>来自外部。但是没有用ping -I eth1 <some_domain>tcpdump显示了当我从eth1外部ping时,Linux直接询问MAC外部地址,这是不正确的,因为它们不是相同的LAN

这是tcpdump …

linux arp tcp-ip

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

golang http helloworld不阻止

我的代码与gowiki中的代码相同

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

但是,在我构建并运行此程序后,它立即退出而没有阻塞,因此当我尝试http://localhost:8080/monkey从Chrome 访问时,我没有得到任何响应.

环境:Ubuntu 14(在Windows7上的VirtualBox中)

为什么?

http go

4
推荐指数
2
解决办法
4007
查看次数

在HTTP中,HTTP ResponseWriter的写入函数缓冲区会不会?

假设我们有一个处理HTTP请求的函数,例如:

func handler(w http.ResponseWriter,  r *http.Request) {
    w.Write([]byte("first piece of data"))
    // do something
    w.Write([]byte("second piece of data"))
}  
Run Code Online (Sandbox Code Playgroud)

我想知道如果第一次调用w.Write()被刷新到客户端?

如果它被刷新,那么我们实际上会对客户端做两次响应,这很奇怪,因为我们如何Content-Length在第二次调用写入之前确定?

如果没有刷新(比如数据在本地缓冲),那么如果我们在第一次调用时写入大量数据会怎么样?(堆栈会溢出吗?)

任何解释将不胜感激!:)

http flush go

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

使用io.Copy进行响应时,谁应该对错误负责?

假设服务器需要向客户端响应一些数据,并且数据来自本地磁盘上的文件.然后我们写,

n, err := io.Copy(w, f)  // w is the ResponseWriter and f is the *os.File
Run Code Online (Sandbox Code Playgroud)

我在想什么就是io.Copy()首先从写一个标题,然后将数据复制fw.

如果err不是nil(比方说unexpected EOF),客户端仍然会获得状态代码200,尽管响应正文包含错误.

也许本地磁盘坏了,或者客户端网络坏了.我们怎样才能确定
是否err是由服务器或客户机引起的?

io go

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

不同语言的切入点

我知道在C/C++和Java中,程序的入口点就是函数main(),
现在我有以下两个问题,

  1. 用MASM,NASM和其他语言编写的程序入口点是什么?

  2. 什么是CPU知道在哪里找到程序入口点的惯例?

== - 编辑 - ==

问题2不是一个有意义的问题,因为CPU负责找到入口点是错误的.没有这样的惯例.见Eric Lippert澄清.

c assembly programming-languages entry-point

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

make和new实际上做了什么?

在Go中,如果我想创建一个T对象,我可以尝试这些方法:

t := T{} // t是在当前堆栈中创建的实际对象
p := &T{} // p是指向在当前堆栈中创建的实际对象
p := make(T) 的指针// p是指向在堆中创建的实际对象的指针
p := new(T) // p是指向在堆中创建的实际对象的指针

我想知道我的评论是否正确?

go

0
推荐指数
1
解决办法
88
查看次数

标签 统计

go ×4

c ×2

http ×2

api ×1

arp ×1

assembly ×1

bit-manipulation ×1

dns ×1

docker ×1

entry-point ×1

flush ×1

io ×1

linux ×1

programming-languages ×1

rest ×1

tcp-ip ×1