APIs,SDKs, and ABIs ===================== The foundational GridWorks package `gridworks `_, which is the source of this documentation, is designed to help you set up a sample GridWorks API and its corresponding SDK in a development environment, to help learn the ropes for core GridWorks communication mechanics. Imagine a GridWorks application (say, a GNode actor) as a cell in a larger organism. It has ways of communicating, and this is captured in its cell membrane. - **APIs** The Application Programming Interface specifies how communication happens at and beyond its cell membranes. - **SDKs** A GridWorks Software Development Kit, on the other hand, is like an internal organelle capable of generating valid messages to send out to other cells. - **ABIs** The application might be an Algorand Smart Contract - for example, a [DispatchContract](dispatch-contract). Then it has an Algorand Application Binary Interface instead of an API. **More on Algorand ABIs** We describe the historical precedent for Application Binary Interfaces. Continuing the cell analogy, an ABI is a specification for a cell communicating _inwardly_ to, say, its mitochondria. ABIs are familiar to c programmers as a way of arranging memory layout. The Algorand blockchain is like a smallish, Turing-complete computer whose guts are spread out across the Internet, whose every internal action in compiler code is visible for the world to see. A method call to an Algorand Smart Contract is much more like a C ABI than a Restful API with a url endpoint. For more information on Algorand ABIs: - A `40 minute youtube `_ discussing the launch of Algorand ABIs - `ARC-4 `_, the source of truth for implementation details - `pyteal ABI support docs `_ - `AlgoBank ABI example `_ GridWorks APIs ^^^^^^^^^^^^^^^ In order to explore how GridWorks APIs work, please start up a version of the ```gwbase``` package API: ``` uvicorn gwbase.rest_api:app --reload --port 8000 ``` navigate to ``` http://127.0.0.1:8001/docs# ``` You can then try out POSTS to various API endpoints. These endpoints will return a valid response if the GridWorks type provided has no errors, and will otherwise return a list of one or more errors. `GridWorks types `_ are the building blocks for GridWorks APIs: they articulate *what* is getting sent without specifying *where and how* (i.e., a Post to a Restful API endpoint, or a message published to an exchange on a rabbit broker). As a first pass, you can make the slightly incorrect assumption that all Gridworks types must be serialized JSON - the lingua franca of APIs. Note that JSON is NOT a programming language. It is a multi-dimensional graph structure, and a greatest common denominator for articulating the WHAT of data that programming languages use and manipulate in separate but interacting applications. For example, a JSON "int"does not articulate anything about memory - it is just an arbitrarily long sequence of `0123456789` characters. The `Type SDK objects `_ provide a Pythonic method of creating valid instances of these types, and for interpretting payloads as natural Python objects. **Examples of sending valid payloads to GridWorks APIS** COMING SOON