我在Web服务中使用RESTful API,具有某些资源,如用户,帖子等.当我提出帖子列表(GET /帖子)的请求时,我想要检索每个帖子(即主题,作者姓名)的减少部分数据的帖子数组.当我提出具体帖子的请求(GET/posts/42)时,我想检索帖子对象字段的完整列表,包括大帖子体,关于喜欢计数,评论计数的其他信息.我想存在很多解决这个问题的方法.在我看来,最明显的3个是:
我要为我的客户构建清晰有用的API.我应该选择哪种方式?
在TypeScript中看起来绝对没问题(从编译器的角度来看)有这样的代码:
class Vehicle {
public run(): void { console.log('Vehicle.run'); }
}
class Task {
public run(): void { console.log('Task.run'); }
}
function runTask(t: Task) {
t.run();
}
runTask(new Task());
runTask(new Vehicle());
Run Code Online (Sandbox Code Playgroud)
但与此同时,我希望编译错误,因为Vehicle
并Task
没有任何共同点.
而理智的用途可以通过明确的接口定义来实现:
interface Runnable {
run(): void;
}
class Vehicle implements Runnable {
public run(): void { console.log('Vehicle.run'); }
}
class Task implements Runnable {
public run(): void { console.log('Task.run'); }
}
function runRunnable(r: Runnable) {
r.run();
}
runRunnable(new Task());
runRunnable(new …
Run Code Online (Sandbox Code Playgroud) 考虑一个例子:我有以下express.js
应用程序(请参阅下面的代码片段).我希望在整个应用程序生命周期中有一个与DB的持久连接,以及一个与我自己的服务的持久连接(需要异步调用才能启动).还有一些入口点,即不仅可以通过HTTP协议访问我的应用程序.当然,我想避免服务初始化代码重复,并且可能有几个这样的异步初始化服务.
/* app.js */
var app = require('express')();
// set views, use routes, etc.
var db = require('monk/mongoose/etc')(...); // happily, usually it's a sync operation
var myService = require('./myService'); // however, it's possible to have several such services
myService.init(function(err, result) {
// only here an initialization process is finished!
});
module.exports.app = app;
/* http_server.js (www entry point) */
var app = require('app');
// create an HTTP server with this app and start listening
/* telnet_server.js (other entry …
Run Code Online (Sandbox Code Playgroud) 在我的一个问题中,我得到以下代码作为答案之一.我对语言的理解现在变得更好了,只有一个小问题.
var person = function() {
this.firstName = "";
this.lastName = "";
}
person.prototype.showFullName = function () {
console.log(this.firstName + " " + this.lastName);
}
var perObj = new person();
perObj.firstName = "Penelope";
perObj.lastName = "Barrymore";
perObj.showFullName();
Run Code Online (Sandbox Code Playgroud)
考虑到对象,
var person = function() {
this.firstName = "";
this.lastName = "";
}
Run Code Online (Sandbox Code Playgroud)
当我用这个对象来称呼时,
var perObj = new person();
Run Code Online (Sandbox Code Playgroud)
这类似于构造函数的东西吗?
一刻代码
var perObj = new person();
Run Code Online (Sandbox Code Playgroud)
被调用会自动执行以下两行吗?
this.firstName = "";
this.lastName = "";
Run Code Online (Sandbox Code Playgroud)
而且在我正在研究的一个博客中,如果文件名是Samplescript.js
,如果函数是使用相同的名称编写的var Samplescript=function(){}
,那么这个函数会被视为构造函数吗?请澄清一下这个.
尽管理论上事情很清楚,但实际上我并没有得到任何关于构造函数的令人满意的答案,在这个例子中,它的编写方式有很多清晰的理解.
可以使用在路径中引用两个以上点的模块吗?像这个例子:
# Project structure:
# sound
# __init__.py
# codecs
# __init__.py
# echo
# __init__.py
# nix
# __init__.py
# way1.py
# way2.py
# way2.py source code
from .way1 import echo_way1
from ...codecs import cool_codec
# Do something with echo_way1 and cool_codec.
Run Code Online (Sandbox Code Playgroud)
UPD:更改了示例。我知道,这将在实践中起作用。但这是一种常见的导入方法吗?
我注意到,即使对于小型阵列,原生forEach有时也会发生得太慢.看看这个例子:
var a = [], b = [];
a[1234567] = 'foo';
b[10] = 'bar';
a.forEach(function(arg1, arg2) { console.log(arg1, arg2); }); //1
//vs
b.forEach(function(arg1, arg2) { console.log(arg1, arg2); }); //2
Run Code Online (Sandbox Code Playgroud)
在我的Chromium(25.0.1364.160 Ubuntu 12.04)中,第1行和第2行的执行时间是不同的数量级.我知道a的长度等于1234568,而b等于10 等等.但是原生的forEach实现是如此幼稚吗?既一个和b是仅由一个元件构成.如何解释这种行为?
我使用PhpStorm,xdebug和nginx + php-fpm进行远程调试.当我传入XDEBUG_SESSION_START=my_ide_key
请求GET
参数时,Nginx使用502错误代码(Bad Gateway)进行调用.同时我在IDE中的代码断点工作正常.当我没有传递XDEBUG_SESSION_START
参数nginx响应格式良好的HTML和代码200.但没有这个参数显然没有调试.
在nginx错误日志中,我看到有关从上游收到的大标头的通知.我尝试在php-fpm和nginx之间转储通信,只有一个不同的东西是一个Set-Cookie
头:
Set-Cookie: XDEBUG_SESSION=666; expires=Mon, 16-Sep-2013 16:07:28 GMT; path=/
Run Code Online (Sandbox Code Playgroud)
我试着找到这个标题出现在响应中的时间.我发现在我的smarty插件Smarty_Internal_Template
析构函数中(在我的启动脚本的最后一行代码行之后),如果我调用,headers_list()
我会看到大量的Set-Cookie标头(相等的析构函数调用和Set-Cookie标头数量).我确信header('Set-Cookie: XDEBUG_SESSION=...')
我的代码中没有一个显式调用.我尝试升级和降级xdebug版本但仍然具有相同的行为.放置代码remove_header('Set-Cookie')
在Smarty_Internal_Template
解决了我的问题,不过这是丑陋的黑客!
有关这种奇怪情况的任何想法?
如何在我的PhantomJS + GhostDriver + Selenium WebDriver + WebDriver客户端系统中清除每个测试的cookie?
我的测试过程如下所示:
当我使用firefox浏览器而不是phantomjs时,所有测试都通过了.但是当我切换到使用phantomjs作为浏览器时,所有检查注册失败的测试都因为cookie在第一次测试执行后已经设置.我可以在每次测试启动时清除所有cookie吗?或者我应该在每个单独的测试中重新启动phantomjs进程(因为这是使用firefox和selenium webdriver而不是hub角色)?
我对该计划的运作方式感到困惑; 代码应该打印A, bB
但它正在显示bA,B
class SampleClass {
public $a = "A";
protected $b = array ("a" => "A", "b" => "B", "c" => "C");
public function __get($v){
echo "$v";
return $this->b[$v];
}
}
$m = new SampleClass();
echo $m->a . ", " . $m->b;
Run Code Online (Sandbox Code Playgroud) 我的Ubuntu机器上的/ etc/environment中有http_proxy设置.我已将CURLOPT_NOPROXY定义为10177然后执行
$curl = curl_init('http://127.0.0.1:4444/wd/hub');
curl_setopt($curl, CURLOPT_NOPROXY, '127.0.0.1'); // or '*'
// ... set others params and options ...
curl_exec($curl);
Run Code Online (Sandbox Code Playgroud)
但这不会影响我的脚本,我收到代理错误消息而不是WebDriver响应.同时使用curl --noproxy 127.0.0.1 http://127.0.0.1:4444/wd/hub
从命令行效果很好.
其他环境信息:
curl --version
curl 7.22.0 (x86_64-pc-linux-gnu)
libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4
libidn/1.23 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
Run Code Online (Sandbox Code Playgroud)
PHP版本是5.3.10.
如何从我的PHP脚本中设置noproxy选项?
更新:看起来它应该在PHP中运行https://bugs.php.net/bug.php?id=53543.
javascript ×4
php ×3
api ×1
asynchronous ×1
class ×1
coding-style ×1
cookies ×1
curl ×1
duck-typing ×1
express ×1
foreach ×1
interface ×1
nginx ×1
node.js ×1
performance ×1
phantomjs ×1
proxy ×1
python ×1
python-3.4 ×1
rest ×1
setcookie ×1
typescript ×1
xdebug ×1