zoukankan      html  css  js  c++  java
  • 日常相关的标准技术和组织

    在使用开源项目做技术选型时,如果对技术标准有一些了解,可以帮我们更容易的了解一些技术的生态和工具链。比如上面的 LDAP,我们可以在采购软件时优先考虑支持 LDAP 的产品,从而降低自行接入的成本;对于自己项目上更为具体的实现,如设计 API,我们可以选择一套参考标准,如 JSON:API,让沟通成本大大降低;在前后端协作上,如果采用 Swagger 的 OpenAPI 可以容易的找到一套开源工具帮我们完成文档、SDK 生成等工作。

    下面让我们一起了解一些互联网常见的技术标准和组织。

    IETF

    IETF 应该是互联网标准组织中名气最大的,它的全称是国际互联网工程任务组(The Internet Engineering Task Force)。IETF下属有很多工作组(WG),专门负责一个领域标准的制定,例如 OAuth。IETF 工作的产出主要是 RFC 文档(Request For Comments)。IETF 最知名的规范是 TCP/IP 协议族,但是我们日常相关更多关注应用层标准,就不介绍通信相关的协议了,下面是一些常见应用层的标准。

    1. RFC 723X HTTP 协议族 HTTP 标准分为多个版本,目前在用的一般是 1.1。同时 HTTP 标准分为核心标准和拓展标准,例如缓存、会话、内容编码等内容属于拓展部分,在选择 HTTP client 时,需要注意其实现程度可能并不完整。另外 method、状态码等枚举类型在 IANA 中心可以找到。
    2. OAuth 开放授权协议 OAuth 相关规范和HTTP类似,也分为核心和拓展。核心的标准文档是 RFC 6749 ,而拓展的部分例如 Bearer token 以及 token 的获取、验证和JWT相关的规范都在另外的文档中。值得一提的是,OAuth OpenID connect 不属于 OAuth 的规范,所以认证并不是 OAuth 要求的。

    JCP

    JCP(Java Community Process) 是一个开放的国际组织,主要由 Java 开发者以及被授权者组成。Java 之所以能发展成目前这个规模,离不开标准化进程,JCP 中的一些规范不仅影响了 Java 世界,对其他语言,例如 PHP、Nodejs 也造成了巨大的影响。在日常服务器开发工作中,用到 JCP 标准非常多,例如数据验证、数据库访问和服务器容器:

    1. Bean Validation 在 Java 中数据校验的规范化是 JCP 一个典型的实践,从最早的 JSR 349 到 JSR 303,目前已经发展到了 Bean validation 2.0,并从之前只支持 J2EE 到开始支持 J2SE。Hibernate 最新的 validator 已经开始支持 2.0 的验证规范。早期讲 Java 的书谈到使用 JSR 验证容易让人感到困惑,JSR 只是验证规范,数据验证是由其他的验证器实现的。同时一些为 Java 之外编程语言设计的验证框架也参考了 JCP 的标准。
    2. JPA Java Persistence API JPA 定义了对象关系映射以及如何持久化到数据中,JPA、ORM、Hibernate 在 Java 开发时是非常容易被混淆的概念。其中 ORM 只是一个对象映射的概念,JPA 规范了 ORM、数据访问 API、查询语言,Hibernate 对 JPA 进行了实现,JPA 其他的实现还有 Open JPA 和 Eclipse Link 等技术。
    3. JAX-RS Java API for RESTful Web Services JAX-RS 定义了 Restful API 构建相关的规范,包括一些常见的注解都来源这个规范,例如 @Path @GET 等,关于 JAX-RS 的实现除了 Spring 全家桶之外,还有 Jersey、RESTeasy 等实现。
    4. Java Servlet Servlet 可以说是 J2EE 中最重要的规范之一,如果不去看 Servlet 的规范很难理解 Servlet 到底是什么,这也是很多公司面试一般都会问的问题。Servlet 定义了 J2EE 应用和服务器容器之间的约定,所以在开发过程中就需要特别注意 WEB 容器提供的额外的特性,以免造成耦合。

    W3C

    W3C 中文名称是万维网联盟,是Web技术领域最具权威和影响力的国际中立性技术标准机构,主要负责制定浏览器上一些技术细节,降低浏览器上 HTML、CSS 渲染之间的差异,以及 DOM、XML 和 SVG 等技术。但是需要注意 JavaScript 不是 W3C 的范围,但需要负责浏览器中 JavaScript API 也就是 DOM 规范的制定:

    1. DOM 在前端开发中,如果想了解更多浏览器渲染原理和处理 DOM 节点,推荐阅读 W3C 的规范文档,DOM 规范文档中描述了 DOM 节点的构建、移除以及事件等信息。
    2. CSP 内容安全策略 CSP 制定了浏览器中加载资源的策略,通过配置让浏览器是否能加载一些资源,例如脚本,能大大提高浏览器对 XSS 攻击的防御能力。
    3. XML 嗯,XML 是W3C制定的规范。

    W3C 的标准更多的是指导浏览器开发,对于前端开发来说,技术选型取决于浏览器支持情况。

    ECMA

    ECMA 中文名称是欧洲计算机制造联合会,主要负责计算机制造和编程相关的标准制定。ECMA 制定了许多编程语言的规范,例如 C#、C++ 等,有趣的是 Sun 公司曾经提交了 Java 相关标准给 ECMA 但是随后又撤销了。ECMA 下面有几个我们可能特别关注的规范:ECMAScript、JSON 和办公文档规范。

    1. ECMAScript ECMAScript 的前身是网景的 JavaScript 和微软的 JScript,后来网景、微软、sun 等公司提出标准化浏览器中的脚本语言,于是JavaScript 被提交到 ECMA,JavaScript 就成了 ECMA-262 标准化的脚本程序设计语言。目前实现 ECMAScript 规范的还有用来制作 Flash 的 ActionScript。
    2. JSON 是一种轻量级的数据交换格式,实际上是 ECMAScript 的一个子集,但是目前来说和语言关系不大,JSON 过于常见,就不讲了。
    3. Office Open XML ECMA 下另外一个非常重要的规范,简称 OOXML,现已成为国际文档格式标准。如果在项目中需要使用编程的方式解析 word 文档,参考这个规范下的实现。

    其他规范

    一些组织或者厂商想推广一些通用的技术方案,但是并没有注册到标准组织。其中有很多技术方案对日常工作很有价值,这里也罗列出来:

    1. JSON:API 有时候在设计 Restful 时很头疼,Restful 只是一种设计理念,没有具体的编码实现,RESTful 甚至不是具体的规范。jsonapi.org 这个网站试图创建一个规范来定义 RESTful API,并且定义了一个新的 MIME 类型 application/vnd.api+json 注册到了 IANA。
    2. HAL Hypertext Application Language 于是有一些组织开始着手准备把 Restful 的请求内容规范化,形成一个统一的语言,这就是 HAL。目前不止一个组织在制定相关规范,IETF 目前都还在草案阶段。
    3. RAML 当 RESTful API 被设计出来后,如何描述 API 模型又是一个挑战,API 模型可以用于文档、契约测试和SDK生成。如果这种模型被规范化,可以带动整个工具链。API 模型目前有 RAML 和 Swagger 主导的 OpenAPI
    4. Microformat 微格式 在 HTML 或者 XML 中,为了让标记语言更为语义化,用于第三方应用程序识别,出现了微格式这类规范。例如,航空公司通过 HTML 格式的邮件发送了机票信息,邮件客户端可以通过微格式识别其中的关键信息,并添加到提示列表中。
    5. Commonmark MarkDown 语法规范。
    6. GraphQL API 查询的语言 通过发送 GraphQL 语句给服务器可以针对的返回特定的数据,避免多次请求和冗余数据在网络上传输。
    来源: https://insights.thoughtworks.cn/software-development-standardization/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

  • 相关阅读:
    【python3之文件操作】
    【Python3之字符编码】
    【python3之变量,输入输出,判断,循环】
    【Python3之正则re】
    【Python3的命名空间与作用域,闭包函数,装饰器】
    【Python3的函数初识】
    【Python3的进制扫盲】
    JS实现数组去重方法总结(六种方法)
    localstorage sessionstorage和cookie的区别,以及他们各自的用法总结
    es6 javascript对象方法Object.assign()
  • 原文地址:https://www.cnblogs.com/doit8791/p/11633376.html
Copyright © 2011-2022 走看看