# REST API 专题

neutron-server（相当于REST API Server）的核心作用之一就是要实现REST API。

在Neutron中，neutron-server（相当于REST API Server）负责将收到的REST API请求交由Plugin来进行相关处理。可以看出，这其实就是一个web服务器要完成的事情，将http请求转化为对资源的操作（通过plugin的方法调用），并返回响应。 REST API可以分为两类：标准API和扩展API。

前者主要是由原先的 nova-network项目沿用而来，实现对网络二层的支持，核心资源只有网络、端口和子网；后者则通过进行扩展，提供更多的网络服务。目前已有的扩展有L3（router）,L4(TPC/udp firewall)及L7(http/https load balancer)。随着neutron项目的不断成熟，扩展API会演化为标准API。

这个过程的主要涉及的模块包括 neutron.server、service模块，以及定义了neutron API的neutron.api包。

![REST API 实现逻辑](https://862586004-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M5xTVk9bGlPYPubRNfr%2Fsync%2F91cb909e7eee979d0548c69021eed2505a789a2a.png?generation=1588031024367607\&alt=media)

以neutron.api.v2包为例，其中base.py中定义了Controller类，是实现URL到plugin的api进行mapping的核心。

其主要方法包括create、delete、index、show、update。

顾名思义，create用于创建资源，delete用于删除资源，show是获取资源、update是更新资源，index是返回请求资源的列表。

以create方法为例来看主要过程。

向network的notifier发送一个资源create.start的通知；然后进行policy的检查；之后调用plugin中相应的方法进行处理，最后向network的notifier发出一个资源create.end的通知。
