小编Ste*_*wig的帖子

带有URL查询参数的HTTP POST - 好主意与否?

我正在设计一个API来通过HTTP,我想知道是否使用HTTP POST命令,但只使用URL查询参数而没有请求体,是一个很好的方法.

注意事项:

  • "良好的网页设计"要求通过POST发送非幂等操作.这是一种非幂等行为.
  • 当URL中存在请求参数时,更容易开发和调试此应用程序.
  • 该API不适合广泛使用.
  • 似乎在没有正文的情况下发出POST请求会花费更多的工作,例如Content-Length: 0必须明确添加标头.
  • 在我看来,没有正文的POST与大多数开发人员和HTTP框架的期望有点相反.

通过URL查询而不是请求体在POST请求上发送参数是否还有其他缺陷或优势?

编辑:正在考虑的原因是操作不是幂等的,并且除了检索之外还有副作用.请参阅HTTP规范:

特别是,已经建立了这样的惯例:GET和HEAD方法不应该具有采取除检索之外的动作的重要性.这些方法应该被认为是"安全的".这允许用户代理以特殊方式表示其他方法,例如POST,PUT和DELETE,以便使用户意识到正在请求可能不安全的操作.

...

方法也可以具有"幂等"的属性(除了错误或到期问题)N> 0个相同请求的副作用与单个请求相同.方法GET,HEAD,PUT和DELETE共享此属性.此外,方法OPTIONS和TRACE不应该有副作用,因此本质上是幂等的.

rest http

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

应该在HttpServletResponse.getOutputStream()/.getWriter()上调用.close()吗?

我用谷歌搜索找不到权威的答案.在Java servlet中,可以通过response.getOutputStream()或response.getWriter()访问响应主体.应该在写入之后在此流上调用.close()吗?

一方面,Blochian劝告总是关闭输出流.另一方面,我认为在这种情况下不存在需要关闭的底层资源.套接字的打开/关闭在HTTP级别进行管理,以允许诸如持久连接之类的事情.

java servlets outputstream

90
推荐指数
4
解决办法
5万
查看次数

随机从文件中选择行而不用Unix扼杀它

我有一个10 ^ 7行文件,其中我想从文件中随机选择1/100行.这是我所拥有的AWK代码,但它会预先包含所有文件内容.我的PC内存无法处理这样的问题.还有其他办法吗?

awk 'BEGIN{srand()}
!/^$/{ a[c++]=$0}
END {  
  for ( i=1;i<=c ;i++ )  { 
    num=int(rand() * c)
    if ( a[num] ) {
        print a[num]
        delete a[num]
        d++
    }
    if ( d == c/100 ) break
  }
 }' file
Run Code Online (Sandbox Code Playgroud)

unix linux awk random-sample file-processing

51
推荐指数
7
解决办法
4万
查看次数

为什么没有更多的Java代码使用PipedInputStream/PipedOutputStream?

我最近发现了这个成语,我想知道是否有我遗失的东西.我从来没有见过它.我在野外工作的几乎所有Java代码都倾向于将数据压入字符串或缓冲区,而不是像这个例子(例如使用HttpClient和XML API):

    final LSOutput output; // XML stuff initialized elsewhere
    final LSSerializer serializer;
    final Document doc;
    // ...
    PostMethod post; // HttpClient post request
    final PipedOutputStream source = new PipedOutputStream();
    PipedInputStream sink = new PipedInputStream(source);
    // ...
    executor.execute(new Runnable() {
            public void run() {
                output.setByteStream(source);
                serializer.write(doc, output);
                try {
                    source.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }});

    post.setRequestEntity(new InputStreamRequestEntity(sink));
    int status = httpClient.executeMethod(post);
Run Code Online (Sandbox Code Playgroud)

该代码使用Unix管道样式技术来防止XML数据的多个副本保留在内存中.它使用HTTP Post输出流和DOM Load/Save API将XML Document序列化为HTTP请求的内容.至于我可以告诉它最大限度地减少用很少的额外代码使用的内存(只是几行了Runnable,PipedInputStreamPipedOutputStream).

那么,这个成语有什么问题?如果这个成语没有错,为什么我没有看到它?

编辑:澄清PipedInputStream …

java concurrency design-patterns pipe

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

用于HTTP错误的Java异常类是什么?

我正在使用Apache HttpClient,并希望通过Java异常机制将HTTP错误(400 Bad Request,404 Not Found,500 Server Error等)传达给调用代码.Java标准库或广泛使用的库中是否存在异常,以便为此目的使用或子类化?

另一种方法是检查状态返回码.这似乎是HttpClient的设计理念,但由于这些错误在我的应用程序中确实非常出色,我希望在它们发生时为我设置堆栈跟踪和其他好的异常事项.

java exception http

24
推荐指数
4
解决办法
4万
查看次数

如何减少Java日志记录样板代码?

每个想要使用java.util.logging的类通常都需要声明一个这样的记录器:

public class MyClass {
    private static Logger _log = Logger.getLogger(MyClass.class.getName());
}
Run Code Online (Sandbox Code Playgroud)

你如何避免这个MyClass.class.getName()样板代码?

java logging

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

重写这种非尾递归函数有什么好方法?

出于某种原因,我无法想出一个重写此函数的好方法,因此它使用不变的堆栈空间.大多数关于树递归的在线讨论都是通过使用Fibonacci函数并利用该特定问题的属性来作弊.有没有人对这个"真实世界"(嗯,比Fibonacci系列更现实世界)使用递归有任何想法?

Clojure是一个有趣的案例,因为它没有尾调用优化,但只通过"recur"特殊形式进行尾递归.它也强烈反对使用可变状态.它确实有许多惰性结构,包括tree-seq,但我无法看到他们如何能够帮助我解决这个问题.任何人都可以分享他们从C,Scheme,Haskell或其他编程语言中学到的一些技巧吗?

(defn flatten [x]
  (let [type (:type x)]
    (cond (or (= type :NIL) (= type :TEXT))
          x
          (= type :CONCAT)
          (doc-concat (flatten (:doc1 x))
                      (flatten (:doc2 x)))
          (= type :NEST)
          (doc-nest (:level x)
                    (flatten (:doc x)))
          (= type :LINE)
          (doc-text " ")
          (= type :UNION)
          (recur (:doc1 x)))))
Run Code Online (Sandbox Code Playgroud)

编辑:通过评论中的请求...

在一般术语和使用Scheme中重述 - 如何重写以下递归模式,以便它不消耗堆栈空间或需要非自调用的尾调用优化?

(define (frob x)
  (cond ((foo? x)
         x)
        ((bar? x)
         (macerate (f x) (frob (g x))))
        ((thud? x)
         (frobnicate (frob (g x))
                     (frob (h x)))))) …
Run Code Online (Sandbox Code Playgroud)

language-agnostic tree recursion functional-programming clojure

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

您使用Scheme宏的一些东西是什么?

许多宏的例子似乎都是关于隐藏lambda,例如在CL中使用open-file.我正在寻找一些更奇特的宏用途,特别是在PLT Scheme中.我想了解何时考虑使用宏与使用函数.

lisp macros scheme racket

10
推荐指数
3
解决办法
2992
查看次数

Java或Apache Commons中是否存在varargs null检查功能?

我有四个变量,我想检查它们中的任何一个是否为空.我可以

if (null == a || null == b || null == c || null == d) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是

if (anyNull(a, b, c, d)) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我不想自己写.这个函数是否存在于任何常见的Java库中?我检查了Commons Lang并没有看到它.它应该使用varargs来获取任意数量的参数.

java validation null variadic-functions

10
推荐指数
2
解决办法
3874
查看次数

是否存在将"块转置"考虑在内的编辑距离算法?

我把"chunk transposition"放在引号中,因为我不知道技术术语应该是什么或者是什么.只知道该过程是否有技术术语将非常有帮助.

关于编辑距离维基百科文章给出了一些关于这个概念的好背景.

通过考虑"块转置",我的意思是

Turing, Alan.
Run Code Online (Sandbox Code Playgroud)

应该匹配

Alan Turing
Run Code Online (Sandbox Code Playgroud)

比它更匹配

Turing Machine
Run Code Online (Sandbox Code Playgroud)

即距离计算应检测文本的子串何时在文本中移动.常见的Levenshtein距离公式不是这种情况.

字符串最多只有几百个字符 - 它们是作者姓名或作者姓名列表,可以是各种格式.我没有做DNA测序(虽然我怀疑那些会对这个主题有所了解的人).

language-agnostic algorithm edit-distance levenshtein-distance

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