Sometimes It's asked: how is YDK different from other alternatives. Instead of doing a direct comparison, will share some criteria that can be used to evaluate model-driven APIs. But, before doing so, let me say that YDK is not a commercial product. It is an open source project that attempts to facilitate the adoption of programmatic interfaces and network automation in general. Any open source project that contributes to that goal is a good thing. Now, what are some of the criteria to evaluate alternatives.
- Language support. YDK has been designed to be language agnostic. Today, it generates Python bindings (YDK-Py) and we hope to generate C++ in the near future. We aspire to support other languages (e.g. go, Ruby, C#) down the road.
- Services/providers. YDK was built from day one with an extensible architecture that relies on services and service providers. YDK does much more than encoding and decoding model data (which is implemented by the Codec service). For instance, it has services (e.g. CRUD, Executor) and providers (e.g. NETCONF) to manage network devices directly. For NETCONF users today, YDK provides a simple NETCONF interface that integrates data validation, encoding/decoding and NETCONF exchanges.
- Data validation. An area that YDK has put a lot of attention on is data validation. We validate config vs state nodes, types, type values, semantics (e.g. list key uniqueness), deviations, etc. This is a lot of code you save on your automation application.
- Project activity. For open source projects (and even commercial products), you want to make sure the project is active. What's the release cadence? Are new futures introduced regularly? Is there a feature roadmap? How often are issues being filed? Are issues being fixed? How many contributors are there? How frequent is new code committed? How detailed is the documentation? Are there guides and examples to get users started? GitHub gives you a panel with the monthly pulse of a project which can be a good starting point (ydk-gen pulse, ydk-py-samples pulse) to assess a the level of activity in a project.
These are some of the criteria you can use today to evaluate alternatives. There is certainly a fair amount of room left for innovation in this area.