Nodejs相关:疑问, REST 的模式是否开始过时呢?

Nodejs相关:疑问, REST 的模式是否开始过时呢?

微博上看到提起 REST… 想起来 REST 还是 2000 年提出的 时间都过了那么久了, 现在的互联网, 环境已经各种超出了想象 一方面有多种设备同时从数据库同步, 不止是浏览器, 还有手机等其他客户端 另外网络性能, HTTP 请求发起请求到传输数据中间还有延时, 可能需要人为合并请求 再说应用对实时的要求越来越高了, 服务端推送也是一个手段 REST 的模式是否将要过时了呢?


10 回复

Node.js 相关:疑问,REST 的模式是否开始过时呢?

在微博上看到关于 REST(Representational State Transfer)的讨论。回想起来,REST 是在 2000 年提出的。如今,互联网环境已经发生了巨大的变化。一方面,我们不仅通过浏览器访问数据,还有多种设备(如智能手机、智能手表等)从数据库同步数据。另一方面,网络性能和延迟问题也日益突出,特别是在发起 HTTP 请求和传输数据的过程中。

此外,现代应用对实时性的需求越来越高,服务器端推送技术(如 WebSocket)逐渐成为一种解决方案。因此,有人提出 REST 是否已经开始过时了?

REST 的基本概念

首先,我们需要了解 REST 的基本概念。REST 是一种设计风格,用于构建网络服务。它基于 HTTP 协议,并利用标准的 HTTP 方法(如 GET、POST、PUT 和 DELETE)来操作资源。

// 示例代码:使用 Express 实现一个简单的 REST API
const express = require('express');
const app = express();

app.use(express.json());

let items = [];

// 获取所有项目
app.get('/items', (req, res) => {
    res.json(items);
});

// 创建新项目
app.post('/items', (req, res) => {
    const newItem = req.body;
    items.push(newItem);
    res.status(201).json(newItem);
});

// 更新项目
app.put('/items/:id', (req, res) => {
    const id = req.params.id;
    const updatedItem = req.body;

    items[id] = updatedItem;
    res.json(updatedItem);
});

// 删除项目
app.delete('/items/:id', (req, res) => {
    const id = req.params.id;
    items.splice(id, 1);
    res.status(204).send();
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

REST 是否过时?

尽管 REST 仍然是构建 Web 服务的一种非常流行的方式,但随着技术的发展,确实出现了一些替代方案。例如:

  • WebSocket:允许全双工通信,适用于实时性高的应用场景。
  • GraphQL:提供更灵活的数据查询方式,减少了过度获取或不足获取数据的问题。

然而,这并不意味着 REST 将完全被淘汰。对于许多应用场景,REST 依然是一个简单而强大的解决方案。选择哪种架构模式取决于具体的需求和场景。

总之,虽然 REST 面临一些挑战,但它依然是一种强大且广泛使用的架构模式。在某些情况下,结合其他技术(如 WebSocket 或 GraphQL)可能会带来更好的效果。


REST 就是个 routing 的模式,正当年。

HTTP 在,REST 就在。

socket? meteor?

实时就就更需要 restful 了吧,

实际上restful 就是一种路由 而已,你觉得过时,那么现在那种比较先进?

哈哈,有http,rest就不会过时,http会过时吗?

WebSockets 实际跑到就是http那层…spdy …也是http 的马甲…最后都能映射到URI模型…

SPDY 是马甲,地下也是http协议,这个是网络层的优化,WebSockets 是解决web实时性的,这个只是http的补充而已

我的看法是,REST还没开始过时,REST是一套风格,我觉得更应该是一种思想,就是站在资源的角度来审视整个系统,这套思想暂时还不会过时,本人拙见

实际上…我想表达的就算是实时应用,也有资源的概念,借用了http来强调这个资源的概念(跟楼下的意思一样),有资源的概念就有restful 存在的意义…至于你觉得过时的话,那现在有什么替代方案?

REST(Representational State Transfer)是一种设计风格,用于构建Web服务。尽管技术环境发生了巨大变化,但REST仍然具有其独特的价值和适用场景,并没有过时。以下是一些关键点:

  1. 设备多样性:虽然设备种类繁多,REST通过HTTP协议提供了统一的接口,能够适应不同设备的需求。

  2. 网络性能与延迟:HTTP协议本身支持持久连接(Keep-Alive),可以减少延迟。此外,现代技术如CDN、缓存机制也能有效提高性能。

  3. 实时性需求:对于需要实时性的应用,可以结合使用WebSocket或Server-Sent Events(SSE)来实现服务器推送,这并不意味着REST过时。事实上,许多现代应用会同时使用REST和WebSocket等技术,以满足不同的需求。

示例代码

使用Node.js和Express实现REST API

const express = require('express');
const app = express();
app.use(express.json());

// 定义一个简单的GET路由
app.get('/api/users', (req, res) => {
    const users = [
        { id: 1, name: 'Alice' },
        { id: 2, name: 'Bob' }
    ];
    res.json(users);
});

// 定义一个POST路由
app.post('/api/users', (req, res) => {
    const newUser = req.body;
    console.log(newUser); // 处理新用户逻辑
    res.status(201).json(newUser);
});

// 启动服务器
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

结合WebSocket实现实时通信

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', ws => {
    ws.on('message', message => {
        console.log(`Received: ${message}`);
        // 向所有连接的客户端广播消息
        wss.clients.forEach(client => {
            if (client !== ws && client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });
});

这段代码展示了如何使用WebSocket实现服务器向客户端发送实时消息,而同时维护传统的REST API。这种方式可以满足不同场景下的需求。

回到顶部