Tag: rest

REST API和移动应用程序的身份validation策略

我正在用Node.js和Express + MongoDB创build一个REST API服务器。 这个API将有不同的移动客户端(iOS,Android),以及可能以后的Web应用程序。 我需要用户login才能执行一些API请求。 没有第三方应用程序我想连接(没有Facebook,谷歌等)。 我也不想强迫用户访问一个网页或类似的东西,以便他们login。 根据我在许多search中看到的,最好的方法是让用户使用完全凭证login一次,向他们发送令牌作为回报,并使用该令牌validation将来的请求,直到过期为止。 但是,我不知道如何实现这一点。 我很困惑所有的不同的策略。 这是通过基于HTTPS的身份validation完成的,具有OAuth,OAuth 2.0,…? 我只是不知道该用什么 另外,我真的不想在这里重新发明轮子,不是因为我懒,而是主要是因为安全问题。 有没有我可以用来实现这个库? 我听说护照,但我不明白,如果这是可行的或不。 这听起来像是一个通用的东西,我相信有一个简单的解决scheme。 谢谢!

智威汤逊前端和后端令牌战略

我在一个nodejs服务器中编写一个前端应用程序在emberjs和后端/服务器端。 我有emberjsconfiguration,以便用户可以login/注册与第三方Oauth(谷歌,微博,Facebook)。 我有一个后端编写在承载RESTful API的express nodejs服务器上。 我没有DB连接到emberjs,我不认为我应该反正,因为它是严格的客户端代码。 我打算使用JWT进行客户端和服务器端之间的通信。 当用户使用他们的oauth信誉login时,我从提供者的uid,name,login,access_token和其他细节中得到一个JSON对象。 我正在努力挑选如何处理用户注册的策略。 由于是OAuth,因此没有注册stream程。 所以stream程是如果用户不在我的分贝,创build它。 我不支持电子邮件/密码authentication。 用户首次使用OAuth提供商login时会有什么stream量? 应该emberjs发送所有的细节到每个login后端,以便后端可以添加新的用户到数据库? 什么应该是我的JWT机构的一部分? 我在想用户和供应商提供的访问令牌。 我能想到的一个问题是提供者特定的访问令牌可以改变。 用户可以从供应商的网站撤消令牌,并用emberjs再次注册。 我打开写在任何其他JavaScript客户端框架的前端,如果它变得更容易。

具有多个客户端平台的应用服务器API的会话devise

我想要构build一个支持多种平台的应用程序:桌面应用程序(Mac / PC),Web(angularJS前端)和原生移动应用程序。 所以我正在考虑一个应用服务器,为上面的平台提供内部API。 我有一些关于如何支持login/注销的假设。 我会很高兴,如果任何人可以评论,如果我的想法是错的。 对于桌面和移动应用程序,“login”function将使用内部API来传递凭证,并作为回报将收到永久令牌。 桌面/移动应用程序将存储令牌并将其用于对应用程序服务器的任何后续请求。 从桌面/移动应用程序“注销”时,令牌将在服务器端丢弃,在前端应用程序端遗忘。 对于Web界面,angular度应用程序会将login后提供的令牌保留为cookie,并将其加载并将其用于对应用程序服务器的任何请求。 这是一种常见的模式?

CouchDB作为Restful API层?

我即将构build一个通过Restful API共享资源的Web应用程序。 让我感到震惊的是,CouchDB已经有了一个很好的Restful API层。 那么,为什么我要创build自己的一个。 我不能让其他Web应用程序通过它的Restful API直接使用我的资源(json文档)在CouchDB上,而不是使用node.js作为中间人? 或者我将需要在CouchDB和第三方Web应用程序之间的一些逻辑? 还没有使用CouchDB,所以我不知道它是否有能力处理高级授权,如果“devise文档JavaScript”应用程序是“node.js javascript”。

哪个API网关可以生产,并提供良好的性能和function?

我们的基础架构中有很多REST服务,这些服务是使用不同的技术(Java,Go,Ruby,NodeJS)构build的,但它们都有一些共同的要求,比如身份validation,授权,速率限制,分析等等,所以我们想要有一个API网关在这些API的前面,以便所有的通信只通过它发生。 我开始了解市场上的一些开源产品,例如Strongloop / Loopback , WSO2 , TYK , APIAXLE和3scale,但其中大部分看起来并不像时间testing和准备用于生产。 我现在想到的几件事情: 在使用这些解决scheme之一后,用户反馈如何? 很多人会需要这种function,所以他们怎么做呢? 我在正确的方向看? 有没有更好的方法来解决我的问题,而不使用API​​网关?

node.js在发出http请求时区分错误

我的node.js应用程序使用http.request到REST API http://army.gov/launch-nukes ,我需要区分三种可能的情况: Success – 服务器答复肯定。 我知道我的敌人被毁灭了。 Failure – 我收到来自服务器的错误, 或者无法连接到服务器 。 我仍然有敌人。 Unknown – build立到服务器的连接后 ,我发送了请求 – 但不知道发生了什么。 这可能意味着请求永远不会将其发送到服务器,或者服务器对我的响应从未做到。 我可能会也可能不会刚刚开始一场世界大战。 正如你所看到的,鉴别Failure和Unknown情况对我来说是非常重要的,因为它们有着非常不同的后果和我需要采取的不同的行动。 我也非常喜欢使用http Keep-Alive,正如我能说的那样,我是一个战争贩子,并计划以连发的方式提出大量请求(然后长时间没有任何请求) – 问题的核心是如何将连接错误/超时(这是一个Failure )与请求被置于连线(这是一个Unknown )之后发生的错误/超时分开。 在伪代码逻辑中,我想这样做: var tcp = openConnectionTo('army.gov') // start a new connection, or get an kept-alive one tcp.on('error', FAILURE_CASE); tcp.on('connectionEstablished', function (connection) { var req = connection.httpGetRequest('launch-nukes'); req.on('timeout', […]

使用Express JS .all()方法:检测哪个VERB被实际使用

我将创build一个/api端点,盲目地将请求和响应来回传递给传统的RESTful API系统(用Ruby编写,托pipe在不同的域上)。 这是一个中介的过渡阶段,所以应该只是工作。 所以,我看到app.all()可以轻松实现。 但是,由于API是RESTful,我还必须维护用于请求的HTTP动词 – 因此,我可以从req对象中检测到它吗? 如果没有,当然我可以订阅5个处理程序的GET,PUT,POST,DELETE,OPTIONS,但是要避免这个好多了。 另外,我该如何处理请求体(查询string和有效载荷)? 我假设我需要手动重新创build查询string从parsingreq.query和传递req.body request https://github.com/mikeal/request是 – 是吗?

ExpressJS和Mongoose REST API结构:最佳实践?

我使用NodeJS(Mongoose&ExpressJS)构build了一个REST API。 我认为目前我有一个非常好的基本结构,但是我想知道这种项目的最佳做法是什么。 在这个基本的版本中,一切都通过app.js文件。 然后每个HTTP方法都被传递给请求的资源。 这允许我dynamic地将资源添加到API,并且每个请求将相应地传递。 为了显示: // app.js var express = require('express'); var mongoose = require('mongoose'); var app = express(); app.use(express.bodyParser()); mongoose.connect('mongodb://localhost/kittens'); var db = mongoose.connection; var resources = [ 'kitten' ]; var repositories = {}; for (var i = 0; i < resources.length; i++) { var resource = resources[i]; repositories[resource] = require('./api/' + […]

如何使用node.js http服务器从mongodb返回大量的行?

我在MongoDB中有一个用户数据库,我想通过JSON中的REST接口导出。 问题是在最坏的情况下,返回的行数已经超过200万。 首先我试过这个 var mongo = require('mongodb'), Server = mongo.Server, Db = mongo.Db; var server = new Server('localhost', 27017, {auto_reconnect: true}); var db = new Db('tracking', server); var http = require('http'); http.createServer(function (request, response) { db.collection('users', function(err, collection) { collection.find({}, function(err, cursor){ cursor.toArray(function(err, items) { output = '{"users" : ' + JSON.stringify(items) + '}'; response.setHeader("Content-Type", […]

如何使用节点的其余客户端上传文件

我在节点上有一个REST客户端,我试图将一个file upload到另一个RESTnetworking服务器,它提供了parsing我的PDF和提取一些数据的能力。 基本上这是一项服务。 我使用的npm包是: https : //www.npmjs.com/package/node-rest-client 。 如果还有其他rest客户,我也可以使用这些客户。 我需要使用的其余API如下所述: POST / ; Uploads a new PDF document via a form <br> POST /file ; Uploads a new PDF document via bytestream 问题是如何上传文件。 另外,我想看看如何在另一端存储文件。