Tag: rest

node.js不能使用http进行其他的调用

我是新来的node.js,我想做一个HTTP请求。 我跟着一个试图打电话给random.org的教程。 这是我的app.js文件: var http = require('http'); //The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new' var options = { host: 'www.random.org', path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new' }; callback = function(response) { var str = ''; //another chunk of data has been recieved, so append it to `str` response.on('data', function (chunk) { str += chunk; }); //the whole response has been […]

如何使参数在节点JS rest API中可选

我们需要公开REST端点。 有三个参数,如何使这些可选。 要求是应该与这些参数中的任何一个一起工作。 例如http://server:port/v1/api/test-api/userId/UnameName/userEmail app.get('v1/api/test-api/:userId/:userName/:userEmail', function(req, res){ }); 当我们通过传递所有三个参数,它工作正常。 但是我们想通过只传递userId或这三个参数中的任何一个来使其工作。 当我们传递更less的参数给它的错误Cannot GET /v1/api/test-api/test5/123 如何在暴露端点时使参数可选?

使用stream式JSON连接两个Node / Express应用程序

我目前有两个应用程序运行… 一个是我的REST API层,为前端提供了许多服务。 另一个是“翻译应用程序”,它可以通过一个JSON对象(通过http POST调用),对该对象执行一些数据转换和映射,并将其返回给REST层 我的情况是我想为大量的对象做这个。 我想要的stream程是: 用户以特定格式请求100,000个对象 – > REST层从数据库中检索 – >将每个JSON数据对象传递给翻译服务以执行格式化 – >将每个对象传回REST层 – > REST层将新对象返回给用户。 我不想要的是在100,000个不同的调用上调用tranlate.example.com/translate,或者通过1个巨大的POST请求传递兆字节的数据。 所以很明显的答案是将数据stream式传输到翻译应用程序,然后将数据stream式传回。 似乎有很多解决scheme可以跨应用程序stream式传输数据:打开一个websocket(socket.io),在两者之间打开一个原始的TCP连接,或者由于Node的HTTP请求和响应数据实际上是一个可以利用的数据stream然后发送一个JSON对象,当它成功的翻译 我的问题是在这里有两个应用程序之间stream数据的最佳做法吗? 看来我应该使用http(req,res)stream,并保持一个长期的连接打开,以保留“REST”模型。 任何可以提供的样本都会很好。

当没有第三方应用程序涉及时需要OAUTH2?

目前我正在尝试使用REST api在node.js中创build一个服务器,以便在Android和iOS中进行的应用程序执行CRUD调用。 当然,我希望这个REST API尽可能的安全。 花费最近几天试图find最好的方法来做这个似乎是一个Oauth2服务器通过HTTPS。 我知道这里有很多,但我无法find任何简单的解释应该如何工作。 所以请不要把这个标记为重复的问题,因为我实际上对此感到困惑。 阅读关于Oauth2 android / ios中的应用程序将需要注册与服务器。 我看到的所有地方都被认为是第三方的应用程序,这不是我的情况。 如果用户决定允许第三方应用程序访问我的REST API,Oauth2似乎更安全。 就像任何支持使用Facebook或G +login的应用程序一样。 但是原始应用程序如何做呢? 像Facebook,Twitter和Google+的官方应用程序? 是否有可能,他们使用Oauth2基本访问/请求眉毛等,但跳过整个用户审批部分,因为它不是第三方的应用程序。 或者他们可能会使用更简单的用户名和密码在标题或通过https发布? 我真的不知道如果我目前不打算添加第三方访问我的api采取什么方式。 什么是一个好的方法来进行?

如何防止用户修改REST请求?

这个问题可能听起来微不足道,但即使阅读了大量的教程,我仍然不知道如何实现REST安全。 我有一个网页和即将准备好的移动应用程序。 他们两个都将使用REST API(用node.js编写),问题是 – 我怎样才能防止用户执行这些请求? 在浏览器中查看networkingstream量,以及向服务器发出的所有GET / POST请求都非常容易。 复制这样的请求,修改其参数和/或有效载荷并将其发送到服务器似乎也很容易。 我如何确保这是我的网页或提出请求的应用程序,而不是其他人?

当您有子资源时,为API – URL处理程序快速路由

我有两个资源,员工和员工组。 我试图实现一个漂亮的URL结构,如: GET /employees列出员工。 GET /employees/123获取员工123。 GET /employees/groups列出员工组。 GET /employees/groups/123获取员工组123。 使用ExpressJS我有: router.get('/employees', (req, res, next) => { next(); }); router.get('/employees/:id', (req, res, next) => { next(); }); router.get('/employees/groups', (req, res, next) => { next(); }); router.get('/employees/groups/:id', (req, res, next) => { next(); }); router.all('*', (req, res) => { res.send('…'); }); 这是行不通的,因为Express不能区分/employees/:id和/employees/groups 。 它认为groups是一个id因为/employees/:id是第一位的。 我确实有URL: GET […]

如何用可选的快速查询参数编写Mongoose查询?

我正在Express 4之上build立一个REST API。对于一个path可以说GET /api/users我想查询我的用户集合相应的可选 queryParams。 所以对API的调用可能看起来像这个host:port/api/users?city=Berlin 在这种情况下, name被省略,不影响查询,而city必须匹配。 我设法做到这一点与下面的黑客。 有没有比这更好的方法? Users.statics.customFilter = function(qP){ return this.find({ $and: [ {$or: [{undefined: {$eq: qP.city}}, {'city': qP.city}]}, {$or: [{undefined: {$eq: qP.name}}, {'name': qP.name}]} ] }); mongoose.model('User', Users); 我从这样的mongoose模式调用这个静态函数… const User = mongoose.model('User'); app.get('/api/users', (req, res) => { User.customFilter(req.query) .exec((err, results) => { if (err) return next(err); res.json(results); }); });

HTTP响应string末尾的奇怪字符

我正在使用下面的nodejs包生成一些简单的restful API。 https://github.com/restify/node-restify 但是在响应json结尾处我得到了一个奇怪的字符。 服务器端代码与以上链接提供的相同。 我怎样才能去除%?

在使用Chai-HTTP进行开机时,似乎有错误的内容types

我期待利用Chai-HTTP进行一些testing。 当然,我想比我的GET更多的testing,但是当我尝试做POST时,我似乎遇到了一个重大的障碍。 在试图找出为什么我的POST不起作用,我开始打他们对POSTtesting服务器。 这是一个POST尝试,使用完全不同的工具链(Jasmine-Node和Frisby)进行testing(工作得很好): frisby.create('LOGIN') .post('http://posttestserver.com/post.php', { grant_type:'password', username:'helllo@world.com', password:'password' }) .addHeader("Token", "text/plain") .expectStatus(200) }) .toss(); 其结果是: Time: Mon, 27 Jun 16 13:40:54 -0700 Source ip: 204.191.154.66 Headers (Some may be inserted by server) REQUEST_URI = /post.php QUERY_STRING = REQUEST_METHOD = POST GATEWAY_INTERFACE = CGI/1.1 REMOTE_PORT = 19216 REMOTE_ADDR = 204.191.154.66 HTTP_CONNECTION = close CONTENT_LENGTH […]

REST API端点命名

让我们考虑一下,我有这个模型Car : { id: id, name: name, color: color } 而关于我有这些终点,通过ID获得一辆车: GET http://example.com/api/cars/:id 和 GET http://example.com/api/cars (get all cars ) 例如,命名只能获取红色汽车的terminal的最佳做法是什么?