Add openconfig RESTCONF compatible API based on the YANG model.
Example of endpoints by YANG module `openconfig-interfaces`
```
http://localhost:5000/restconf/data/openconfig-interfaces:interfaces
http://localhost:5000/restconf/data/openconfig-interfaces:interfaces/interface=eth0
http://localhost:5000/restconf/data/openconfig-interfaces:interfaces/interface=eth0/counters
http://localhost:5000/restconf/data/openconfig-interfaces:interfaces/interface=eth0/state/mtu
```
[[ https://github.com/openconfig/public/tree/master/release/models/interfaces | YANG ]] model interfaces
```
/opt/openconfig/yang_modules # pyang openconfig-interfaces.yang -f tree --tree-depth=5
module: openconfig-interfaces
+--rw interfaces
+--rw interface* [name]
+--rw name -> ../config/name
+--rw config
| +--rw name? string
| +--rw type identityref
| +--rw mtu? uint16
| +--rw loopback-mode? oc-opt-types:loopback-mode-type
| +--rw description? string
| +--rw enabled? boolean
+--ro state
| +--ro name? string
| +--ro type identityref
| +--ro mtu? uint16
| +--ro loopback-mode? oc-opt-types:loopback-mode-type
| +--ro description? string
| +--ro enabled? boolean
| +--ro ifindex? uint32
| +--ro admin-status enumeration
| +--ro oper-status enumeration
| +--ro last-change? oc-types:timeticks64
| +--ro logical? boolean
| +--ro management? boolean
| +--ro cpu? boolean
| +--ro counters
| +--ro in-octets? oc-yang:counter64
| +--ro in-pkts? oc-yang:counter64
| +--ro in-unicast-pkts? oc-yang:counter64
| +--ro in-broadcast-pkts? oc-yang:counter64
| +--ro in-multicast-pkts? oc-yang:counter64
| +--ro in-errors? oc-yang:counter64
| +--ro in-discards? oc-yang:counter64
| +--ro out-octets? oc-yang:counter64
| +--ro out-pkts? oc-yang:counter64
| +--ro out-unicast-pkts? oc-yang:counter64
| +--ro out-broadcast-pkts? oc-yang:counter64
| +--ro out-multicast-pkts? oc-yang:counter64
| +--ro out-discards? oc-yang:counter64
| +--ro out-errors? oc-yang:counter64
| +--ro last-clear? oc-types:timeticks64
| +--ro in-unknown-protos? oc-yang:counter64
| +--ro in-fcs-errors? oc-yang:counter64
| +--ro carrier-transitions? oc-yang:counter64
| +--ro resets? oc-yang:counter64
+--rw hold-time
| +--rw config
| | +--rw up? uint32
| | +--rw down? uint32
| +--ro state
| +--ro up? uint32
| +--ro down? uint32
+--rw subinterfaces
+--rw subinterface* [index]
+--rw index -> ../config/index
+--rw config
| ...
+--ro state
...
/opt/openconfig/yang_modules #
```
Expected example of response
```sever@sever:~$ curl http://localhost:5000/restconf/data/openconfig-interfaces:interfaces
{
"openconfig-interfaces:interfaces": {
"interface": [
{
"name": "eth0",
"config": {
"name": "eth0",
"mtu": 1504,
"description": "WAN interface",
"enabled": true
}
},
...
]
}
}
```
The API MUST be written with the [[ https://datatracker.ietf.org/doc/html/rfc8040 | RFC 8040 ]] specification.