【ASP.NET Core 基础知识】--Web API--RESTful设计原则

一、简介

RESTful设计的背景源于Roy Fielding博士在他2000年的博士论文中提出的REST(Representational State Transfer)架构风格。REST旨在构建可伸缩、可维护的网络应用,强调资源的统一标识、无状态通信和统一接口。基于HTTP协议,RESTful设计通过简化架构、提高系统可靠性,促使Web服务的广泛应用。

  1. RESTful的定义:
    RESTful是一种基于REST原则的架构风格,用于设计网络应用程序和服务。REST(Representational State Transfer)是Roy Fielding博士在其博士论文中提出的一种网络软件架构风格,强调资源的统一标识和无状态通信。
  2. RESTful的特点:
    • 资源标识: 使用URI作为资源的唯一标识符,每个资源通过唯一的URL进行访问。
    • 统一接口: 通过一致的接口,使用HTTP方法(GET、POST、PUT、DELETE等)对资源执行操作。
    • 无状态性: 每个请求包含足够的信息完成操作,服务器不保存客户端的状态。
    • 资源的自描述性: 使用标准数据格式(如JSON、XML)和超媒体作为应用状态的引擎(HATEOAS)。
    • 可伸缩性: 支持水平扩展,适应不断增长的用户和资源数量。
    • 可见性: 客户端与服务器之间的通信应该是可读的,以促进系统的可维护性。

通过这些特点,RESTful架构实现了分布式系统的简化、灵活性和互操作性,成为构建现代Web服务的常用设计范式。

二、RESTful基本原则

2.1 资源标识
  1. URI的设计与规范
    • 唯一性: URI应该足够唯一标识资源,避免冲突。使用具有意义的标识符,反映资源层级关系。
    • 可读性: URI应该是人类可读的,以便开发者能够理解和记忆。避免过度的复杂性和不必要的信息。
    • 层级结构: 使用层级结构表示资源的关系,体现RESTful的无状态和统一接口原则。例如,/users/123/orders/456表示用户123的订单456。
    • 使用名词而非动词: URI中应该使用名词来表示资源,而不是动词。动词应该由HTTP方法表示,如GET、POST、PUT、DELETE等。
    • 使用短横线: 推荐使用短横线(-)而非下划线(_)来连接单词,以增强可读性。
    • 资源类型: URI中可以包含资源类型,有助于标识不同种类的资源。例如,/products/123表示产品资源。
    • 版本控制: 在URI中可以包含版本信息,以便管理API的演化。例如,/v1/users/123表示API版本1中的用户资源。
    • 避免大小写敏感问题: 统一使用小写字母,以避免大小写敏感问题,提高可移植性。
    • 稳定性: URI的设计应该是稳定的,避免频繁变更,以确保对已发布URI的兼容性。

遵循这些规范和设计原则可以帮助构建清晰、可维护且易于理解的URI,有助于实现RESTful设计的目标。

  1. 资源的命名规范
    • 语义明确: 资源的命名应具有清晰的语义,反映其实际内容或用途,使其容易理解。
    • 使用名词: 在资源的命名中应该使用名词,而不是动词,因为HTTP方法已经表示了对资源的操作。
    • 复数形式: 对于表示集合的资源,推荐使用复数形式。例如,/users表示用户集合。
    • 避免冗余: 避免在URI中包含冗余信息,如资源类型或操作类型,除非有明确的理由。
    • 层级结构: 如果资源存在层级关系,通过层级结构的方式反映在URI中,例如,/departments/123/employees/456表示部门123的员工456。
    • 使用短横线: 在资源名中使用短横线而不是下划线,以提高可读性,例如,/product-categories而不是/product_categories
    • 遵循领域规范: 在特定领域中,可能有一些行业或标准的命名规范,应该遵循这些规范。
    • 版本控制: 如果有多个API版本,可以在资源命名中包含版本信息,以确保不同版本的资源不发生冲突。
    • 避免保留字: 避免使用可能与URI解析或其他技术相关的保留字,以免造成混淆。
    • 保持简洁: 尽量保持URI简洁,避免过度复杂或深层嵌套,提高可读性和维护性。

通过遵循这些资源命名规范,可以创建一致、易于理解和维护的RESTful API。这有助于开发者更容易理解API的设计,并减少潜在的歧义和错误。

2.2 统一接口
  1. HTTP方法的合理使用
    • GET:
      • 用于获取资源的表示形式。
      • 不应该对资源进行修改,且操作是幂等的,多次请求的结果应该相同。
    • POST:
      • 用于在服务器上创建新的资源。
      • 通常伴随着在请求体中包含资源的数据,且不是幂等的。
    • PUT:
      • 用于更新或创建指定URI的资源。
      • 请求体中包含完整的资源表示形式,对同一URI的多次调用应该具有相同的结果。
    • DELETE:
      • 用于删除指定URI的资源。
      • 操作是幂等的,多次调用不应该导致不同的结果。
    • PATCH:
      • 用于对资源进行局部更新。
      • 请求体中包含需要应用的资源的部分表示形式。
    • OPTIONS:
      • 用于获取目标资源支持的通信选项。
      • 帮助客户端了解服务器对资源的支持情况,常用于CORS预检请求。
    • HEAD:
      • 类似于GET,但不返回实际资源,只返回头部信息,用于获取资源的元信息。
    • TRACE:
      • 用于追踪请求在代理服务器上的传输情况。
      • 在调试和诊断时使用。
    • CONNECT:
      • 用于建立与目标资源的隧道连接。
      • 主要用于代理服务器,用于将加密流量传输到原始的、未加密的HTTP连接。

合理使用HTTP方法有助于符合RESTful设计原则,确保对资源的操作语义清晰,遵循幂等性和无状态性的原则,以及提高系统的可维护性和可读性。

  1. 媒体类型的选择和处理
    • 选择适当的媒体类型:

      • 根据资源的性质选择合适的媒体类型,如JSON(application/json)、XML(application/xml)等。
      • 媒体类型应该在请求头中明确指定,以确保客户端和服务器都理解并能正确处理。
    • 提供多种格式的表示形式:

      • 支持多种媒体类型,以便客户端可以根据其需求选择最合适的表示形式。
      • 使用Accept头部来指定客户端所期望的媒体类型。
    • 处理媒体类型版本:

      • 在设计API时,考虑媒体类型的版本控制,以支持演化和向后兼容性。
      • 版本信息可以在媒体类型中进行指定或通过URI参数表达。
    • 使用标准格式:

      • 选择标准的数据格式,如JSON或XML,以提高互操作性和开发者的熟悉度。
      • 避免使用自定义的媒体类型,除非有特殊需求。
    • 支持内容协商:

      • 使用内容协商机制,根据请求头中的Accept字段和服务器支持的媒体类型,动态选择最合适的表示形式。
      • 服务器可通过响应头中的Content-Type字段指定返回的媒体类型。
    • 错误处理的媒体类型:

      • 在错误响应中使用适当的媒体类型来描述错误信息,如使用JSON格式的错误信息。
      • 通过错误码和描述信息,帮助客户端理解并正确处理错误情况。
    • 超媒体应用状态引擎(HATEOAS):

      • 考虑使用HATEOAS原则,在响应中提供相关资源的链接,以引导客户端进行进一步的状态转换。
    • 媒体类型的安全性:

      • 确保所选媒体类型不会引入安全风险,避免使用可能存在安全问题的媒体类型。

通过合理选择和处理媒体类型,可以提高API的灵活性、互操作性和可维护性,确保客户端和服务器之间的有效通信。

2.3 无状态性
  1. 无状态通信的优势
    • 简化服务器设计: 无状态通信使得服务器不需要维护客户端的状态信息,降低了服务器的复杂性,使其更易于设计和实现。
    • 提高可伸缩性: 由于服务器不保存客户端的状态信息,因此可以更容易实现水平扩展,以适应不断增长的用户量和请求负载。
    • 容错性增强: 无状态通信使得每个请求都是相互独立的,服务器不依赖于先前的请求状态。这提高了系统的容错性,即使某一请求失败,不会影响其他请求的处理。
    • 更好的可见性: 无状态性有助于提高系统的可见性,每个请求都包含足够的信息,使其能够独立解释和理解。这使得系统更易于调试和监控。
    • 提高可缓存性: 无状态通信使得服务端和中间代理能够更轻松地对响应进行缓存。这降低了对服务器的请求频率,提高了系统的性能和效率。
    • 简化客户端实现: 客户端不需要维护复杂的会话状态信息,减轻了客户端的负担。这使得客户端的实现更为简单和灵活。
    • 支持负载均衡: 由于请求之间相互独立,无状态通信使得负载均衡更为容易实现,每个请求可以独立地分发到不同的服务器节点。
    • 增强系统的可移植性: 无状态通信降低了对特定会话状态的依赖,使得系统更具有可移植性,能够更容易地跨多个服务器和环境进行部署。

无状态通信提供了一种简单而有效的通信模型,为分布式系统的设计和实现提供了许多优势,包括可伸缩性、容错性、可见性和性能提升。

  1. 会话管理的最佳实践
    • 使用Token进行身份验证: 采用基于令牌(Token)的身份验证机制,如OAuth,以减轻服务器负担,避免服务器存储用户敏感信息。
    • 设置合理的过期时间: 对会话和令牌设置适当的过期时间,以降低安全风险。过期时间应根据业务需求和安全要求进行调整。
    • 使用HTTPS协议: 始终使用HTTPS协议来保护会话信息的传输安全性,防止中间人攻击和窃听。
    • 不存储敏感信息在客户端: 避免在客户端存储敏感信息,如密码等。使用安全的加密算法进行密码存储,并在传输过程中加密敏感信息。
    • 实施多因素身份验证: 对于敏感操作,考虑使用多因素身份验证,提高账户安全性。
    • 定期更新会话标识: 定期更新会话标识或令牌,以降低被劫持的风险。这可以通过定期重新颁发令牌或会话ID来实现。
    • 防止会话劫持: 使用安全的标识符和令牌生成方法,以防止会话劫持。使用HTTP Only 和 Secure Cookie 属性来提高Cookie的安全性。
    • 监控和记录活动日志: 实施会话监控和记录,及时发现异常活动,以便快速响应安全事件。
    • 及时注销: 提供用户注销功能,确保用户能够主动结束会话,尤其是在公共设备上登录时。
    • 审查第三方库和工具: 对于用于实现会话管理的第三方库和工具,定期审查其安全性漏洞,及时升级或替换有安全问题的组件。
    • 合理设置Cookie属性: 对于存储会话标识的Cookie,设置HttpOnly、Secure等属性,以增强Cookie的安全性。
    • 教育用户安全意识: 提供用户安全教育,使其了解安全最佳实践,包括不在公共设备上保存登录信息等。

通过遵循这些最佳实践,可以加强系统的会话管理安全性,降低风险,提升用户和数据的保护水平。

2.4 资源的自描述性
  1. 使用标准的数据格式
    资源的自描述性是RESTful设计的核心原则之一。通过使用标准的数据格式如JSON或XML,资源能够清晰地描述其结构和属性,提高可读性和可理解性。这不仅使开发者更容易理解和使用API,还为客户端和服务器之间的通信提供了一致的结构,降低了误解和错误的可能性。同时,遵循自描述性原则有助于实现超媒体应用状态引擎(HATEOAS),使得资源的关系和可执行操作能够动态地包含在资源表示中,提升系统的灵活性和可扩展性。

  2. 使用超媒体作为应用状态的引擎(HATEOAS)
    其中使用超媒体作为应用状态的引擎(HATEOAS)是一种强化自描述性的方法。通过在资源的表示中嵌入超媒体链接,服务器能够向客户端提供资源之间的关系和可执行的操作,而不仅仅是数据。这种动态引擎使客户端无需预先了解所有可能的操作,而是根据资源的当前状态自发地发现和使用可用的功能。这提高了系统的灵活性和可扩展性,因为服务器端的变更不会影响客户端的行为,只需客户端遵循超媒体链接即可。HATEOAS还促进了API的自文档化,因为超媒体本身包含了关于资源和操作的信息,减少了对外部文档的依赖。这种自描述性和动态性使得系统更具适应性和可维护性,有助于构建更为强大和智能的RESTful服务。

三、RESTful最佳实践

  1. 资源的合理命名:
    • 选择清晰、简洁、有意义的资源名,并使用复数形式,反映资源的层次结构。
  2. 使用HTTP方法正确:
    • 使用GET用于获取资源,POST用于创建资源,PUT用于更新或创建资源,DELETE用于删除资源,确保HTTP方法的语义正确。
  3. 统一接口设计:
    • 保持接口的一致性,使用统一的数据格式,如JSON或XML,以及标准的HTTP状态码和头部。
  4. 资源状态的自描述性(HATEOAS):
    • 使用超媒体作为应用状态的引擎,为资源表示中添加相关链接,使客户端能够动态地发现和使用可用的功能。
  5. 适当的状态码:
    • 使用适当的HTTP状态码,如200 OK、201 Created、204 No Content等,明确传达操作结果。
  6. 版本控制:
    • 对API进行版本控制,可以通过URI参数或请求头中的版本信息实现,确保兼容性和演化性。
  7. 使用HTTPS:
    • 始终使用HTTPS协议以确保通信的安全性和数据的机密性。
  8. 错误处理:
    • 使用合适的HTTP状态码表示错误,并在响应体中提供详细的错误信息,帮助客户端识别和处理问题。
  9. 合理的缓存策略:
    • 利用HTTP缓存机制,使用适当的Cache-Control和ETag头部来提高性能,减轻服务器负担。
  10. 身份验证和授权:
    • 使用标准的身份验证机制,如OAuth,实施适当的授权策略,确保对资源的安全访问。
  11. 请求和响应的合理结构:
    • 请求和响应的结构应该合理,易于理解,遵循领域内的最佳实践。
  12. 文档和教育:
    • 提供清晰、详尽的文档,以及示例代码,帮助开发者正确地使用API。教育开发者关于RESTful设计原则和最佳实践。

通过遵循这些最佳实践,可以确保设计出稳健、可扩展、易维护的RESTful API,提高系统的可用性和开发者体验。

四、RESTful设计中的挑战与解决方案

4.1 跨域资源共享(CORS)问题
  1. 概念:
    CORS是一种浏览器机制,用于在浏览器中执行跨域HTTP请求。当在一个域(Origin)的网页上通过脚本请求另一个域的资源时,浏览器会执行CORS策略,阻止对跨域资源的非同源请求。

  2. 原因:
    CORS问题的主要原因是浏览器的同源策略(Same-Origin Policy),该策略限制了一个网页从一个域请求另一个域的资源,以防止恶意的跨站点请求。

  3. 解决方案:

    • 服务器端配置:
      • 在服务器端设置响应头中的Access-Control-Allow-Origin,指定允许访问的域。例如,设置为*表示允许任何域访问。
      Access-Control-Allow-Origin: *
      
    • 处理复杂请求:
      • 复杂请求,如带有自定义头部的请求(例如:PUT、DELETE、自定义Content-Type),需要服务器在响应中添加额外的头部,如Access-Control-Allow-HeadersAccess-Control-Allow-Methods
      Access-Control-Allow-Headers: Content-Type, Authorization
      Access-Control-Allow-Methods: GET, POST, PUT, DELETE
      
    • 携带身份信息:
      • 如果请求中包含凭证(例如Cookie或HTTP认证信息),服务器需设置Access-Control-Allow-Credentials: true,且客户端请求中需设置withCredentials属性为true
    • 预检请求(Preflight):
      • 对于复杂请求,浏览器会先发送一个预检请求(OPTIONS)获取服务器是否允许实际请求。服务器需响应预检请求,并包含相关头部信息。
    • 限制来源和方法:
      • 在服务器端限制允许的来源和方法,只允许特定的域或HTTP方法访问资源,增加安全性。
      Access-Control-Allow-Origin: https://allowed-domain.com
      Access-Control-Allow-Methods: GET, POST
      

通过合理配置服务器响应头和处理复杂请求,可以有效解决CORS问题,使跨域请求在浏览器中得以正常执行。

4.2 复杂性管理
  1. 挑战:

    • 大规模系统的复杂性:
      • 在大规模系统中,资源和服务的增多可能导致API的复杂性增加,包括资源关系、接口设计和版本控制。
    • 微服务架构的引入:
      • 微服务架构的实施可能带来分布式系统的挑战,如服务发现、通信、事务一致性等,增加了整体系统的复杂性。
    • 不同团队的协作:
      • 不同团队参与API的设计和开发,可能导致设计风格和实现的差异,增加了整合和维护的难度。
  2. 解决方案:

    • 合理划分资源和服务:
      • 将系统中的资源进行合理划分,避免单一API变得庞大复杂。将相关的资源组织成服务,采用微服务架构,提高系统的可维护性。
    • 统一标准和规范:
      • 制定一致的API标准和规范,确保团队之间共享相同的设计原则。使用API描述语言(如OpenAPI)来文档化API,提供清晰的接口定义。
    • 版本管理策略:
      • 制定合理的API版本管理策略,确保向后兼容性,避免对现有客户端造成破坏。可以在URI或请求头中包含版本信息。
    • 持续集成和测试:
      • 实施持续集成和测试,确保API的稳定性和一致性。自动化测试、代码审查和质量控制有助于减少错误和维护成本。
    • 统一认证和授权机制:
      • 实施统一的认证和授权机制,确保不同的服务在权限管理上保持一致,降低安全风险。
    • 使用API网关:
      • 引入API网关作为入口,集中管理请求、认证、授权和监控,提高系统的可观察性和安全性。
    • 团队培训和沟通:
      • 进行团队培训,确保团队成员对RESTful设计原则和最佳实践有一致的理解。加强团队之间的沟通,及时解决设计和实现上的问题。

通过以上解决方案,可以有效应对RESTful设计中的复杂性管理挑战,提高系统的可维护性和可扩展性。

五、实例分析

实际案例:电子商务平台的RESTful设计

在电子商务平台中,RESTful设计可应用于商品管理、购物车、订单处理等方面。以下是一个简单的例子:

  1. 资源的设计:
    • 商品资源: /products/{productId}
      • 使用GET方法获取商品信息
      • 使用POST方法创建新商品
      • 使用PUT方法更新商品信息
      • 使用DELETE方法删除商品
    • 购物车资源: /carts/{userId}
      • 使用GET方法获取购物车内容
      • 使用POST方法添加商品到购物车
      • 使用PUT方法更新购物车中商品数量
      • 使用DELETE方法移除购物车中的商品
    • 订单资源: /orders/{orderId}
      • 使用GET方法获取订单详情
      • 使用POST方法创建新订单
      • 使用PUT方法更新订单状态
      • 使用DELETE方法取消订单
  2. 使用超媒体作为应用状态的引擎:
    • 在商品资源的表示中包含相关链接,如商品详情、加入购物车等操作的链接,以引导客户端执行相关操作。
  3. 版本控制:
    • 在API中引入版本控制,如/v1/products/{productId},确保对API的演化和变更进行有效管理。
  4. 身份验证和授权:
    • 使用OAuth等标准身份验证机制,确保用户在访问受保护资源时经过身份验证,并有相应的授权。
  5. 错误处理:
    • 在响应中使用适当的HTTP状态码表示操作结果,如200 OK、201 Created、400 Bad Request、404 Not Found等,同时在响应体中提供详细的错误信息。
  6. 使用HTTPS协议:
    • 保障数据的传输安全性,通过HTTPS协议提供加密保护。
  7. 持续集成和测试:
    • 使用自动化测试确保API的质量,实施持续集成,减少错误的引入。

这个案例展示了如何在电子商务平台中应用RESTful设计原则,通过资源的清晰定义、超媒体引擎的使用、版本控制等方式,实现了一个灵活、可维护且易于理解的API。这有助于提高开发效率、降低维护成本,并为客户端提供一致而富有表达力的接口。

六、总结

RESTful设计是一种面向资源的API设计理念,通过统一接口、资源标识、状态转移和自描述性等原则,实现了分布式系统的灵活性和可扩展性。关键挑战包括复杂性管理、CORS问题等。在实际应用中,通过资源的清晰定义、超媒体引擎的使用、版本控制等策略,如电商平台案例所示,RESTful设计提供了一种清晰、可维护的API设计方式,减少了系统耦合度,提高了开发效率和可用性。合理划分资源、统一标准和规范、持续集成与测试等最佳实践帮助应对复杂性管理。总体而言,RESTful设计不仅满足分布式系统的需求,还为构建可持续演化的API提供了一系列有效的解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云计算、Docker、K8S问题

1 云计算 云计算作为一种新兴技术,已经在现代社会中得到了广泛应用。它以其高效、灵活和可扩展特性,成为了许多企业和组织在数据处理和存储方面的首选方案。 1.1 什么是云计算?它有哪些特点? 云计算是一种通过网络提供计算资源…

大型软件编程实例分享,诊所门诊处方笺管理系统多台电脑同时使用的软件教程

大型软件编程实例分享,诊所门诊处方笺管理系统多台电脑同时使用的软件教程 一、前言 以下教程以 佳易王诊所门诊电子处方管理系统V17.2 为例说明 软件资源可以点击最下方官网卡片了解详情 软件左侧为导航栏 1、系统参数设置:可以设置打印等参数 2、…

课时14:变量基础_变量定义

2.1.3 基本操作 学习目标 这一节,我们从 变量查看、变量定义、变量移除、小结四个方面来学习。 变量查看 语法解析 基本格式$变量名示例 查看默认的shell类型 [rootlocalhost ~]# echo $SHELL /bin/bash变量定义 普通语法解析 基本格式变量名变量值注意&…

二.AV Foundation 视频播放 - 创建播放器

引言 当我们探讨播放功能时,上一篇文章简要介绍了与核心类和API相关的内容,并提供了一个简单的播放案例。然而,实际使用视频播放器时,我们通常不会采用类似的写法,而是更倾向于构建一个完整、可重用的播放组件。在接下…

【数据分享】1929-2023年全球站点的逐年降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 之前我们分享过1929-2023年全球气象站点的逐年平均气温数据、逐年最高气温数据…

Debian系统显示中文

开发板上的debian默认不显示中文。 安装字体 sudo apt install fonts-wqy-zenhei 安装locals sudo apt install locales (无必要)设置/etc/locale.gen、设置/etc/locale.conf 运行dpkg-reconfigure locales dpkg-reconfigure locales 可以选择UT…

Sqli靶场23-->30

不知不觉鸽了几天了,没办法去旅游摸鱼是这样的了,抓紧时间来小更一下 23.过滤注释符号 先手工注入一下,就能发现两个单引号不报错,但是一旦上到注释符号的话就会报错,可以猜测出是对注释符号进行了过滤,我…

【Crypto | CTF】BUUCTF 萌萌哒的八戒

天命:这年头连猪都有密码,真是奇葩,怪不得我一点头绪都没有 拿到软件,发现是.zip的压缩包,打不开,改成7z后缀名,打开了 发现是一张图片 也只有下面这行东西是感觉是密码了,又不可能…

前端面试题——Vue的双向绑定

前言 双向绑定机制是Vue中最重要的机制之一,甚至可以说是Vue框架的根基,它将数据与视图模板相分离,使得数据处理和页面渲染更为高效,同时它也是前端面试题中的常客,接下来让我们来了解什么是双向绑定以及其实现原理。…

eslint报错文档大量红色报错符号 不自动修正

确保eslint在工作 控制台大量报错信息 确保setting.json 开了保存的时候自动格式化代码 这个时候保存的时候代码可以自动被格式化 但是 文档中和控制台中仍然有大量的报错 信息 此时此刻说明 格式化文档的文件不是按照eslint 格式化的 可以网上找找现成可用的setting.json抄…

一站式SpringBoot学习平台:让编程变得轻松有趣!

介绍:Spring Boot是一个开源的Java框架,旨在简化Spring应用程序的开发和部署过程。 Spring Boot由Pivotal团队设计并推出,它的核心优势在于极大地简化了传统Spring应用的初始搭建和开发流程。具体来说,Spring Boot的主要特点包括&…

Bard 最新更新:全球开放访问Gemini Pro并生成图片

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领域的领跑者。点击订阅,与未来同行! 订阅:https://rengongzhineng.io/ 。 今…

【讲座分享】| 复旦大学张奇教授——《自然语言发表论文如何打怪升级?NLP顶会论文发表》

文章目录 1 基础关1.1 基础书籍1.2 提高书籍1.3 课程链接1.4 编程实战 2 阅读关2.1 分层过滤2.2 集团作战,信息获取2.3 论文如何泛读 3 动机 方向关3.1 快速发论文3.2 好的研究 4 写作关4.1 论文写作流程4.2 从读者角度出发4.3 每一部分怎么写4.3.1 Abstract摘要4.3…

深度学习预备知识1——数据操作

所有机器学习方法都涉及从数据中提取信息,因此需要一些关于数据的实用技能,包括存储、操作和预处理数据。 机器学习通常需要处理大型数据集。线性代数和矩阵是计算大量数据的有力工具,需要一些矩阵运算相关的线性代数知识。 深度学习是关于…

[office] excel中weekday函数的使用方法 #学习方法#微信#媒体

excel中weekday函数的使用方法 在EXCEL中Weekday是一个日期函数,可以计算出特定日期所对应的星期数。下面给大家介绍下Weekday函数作用方法。 01、比如,我在A84单元格输入一个日期,2018/5/9;那么,我们利用weekday计算…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(八)

原文:Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者:飞龙 协议:CC BY-NC-SA 4.0 第十八章:强化学习 强化学习(RL)是当今最激动人心的机器学习领域之一,也是最古老…

题目 1186: 倒杨辉三角形

题目描述: ans喜欢图形,而且喜欢把图形倒过来欣赏。有一次,他看见杨辉三角形 了,觉得很新鲜,于是就把它们大大小小地摆布出来。输入一些整数n(1≤n≤10),读入其每个整数,以该整数为…

学习MySQL的CSV存储引擎

学习MySQL的CSV存储引擎 MySQL作为全球最受欢迎的开源关系型数据库管理系统,不仅以其性能、可靠性和易用性著称,还因其多样的存储引擎而备受开发者青睐。其中,CSV存储引擎是一个独特的选择,它允许数据以逗号分隔值(CS…

跟着pink老师前端入门教程-day18

3、CSS3 3D转换 生活中的环境是3D的,照片就是3D物体在2D平面呈现的例子 特点:近大远小,物体后面遮挡不可见 3.1 三维坐标系 三维坐标系其实就是指立体空间,立体空间是由3个轴共同组成的 x轴:水平向右 注意&#x…

C# 旋描仪或扫描仪

旋转扫描仪(Rotary Scanner)是一种特殊类型的扫描仪,它通过旋转机构将待扫描的物体固定在转台上,然后通过旋转扫描头将整个物体进行扫描。旋转扫描仪通常用于扫描大型文档、绘画作品、工程图纸等。 旋转扫描仪的工作原理如下&…