X-Git-Url: https://git.r.bdr.sh/rbdr/r.bdr.sh/blobdiff_plain/b0ca5dae576c4b0fae7f1ce2727e9a3605808794..1203ab0c3d0865ed94ff2d6fdd1a999eb5eaf58e:/api.gmi diff --git a/api.gmi b/api.gmi index 3e48607..60cc62a 100644 --- a/api.gmi +++ b/api.gmi @@ -1,10 +1,13 @@ --- title: /api.html --- description: API Notation -# API Notation +## API Notation -The following document attempts to define a legend for easy specification of APIs for components. Any suggestions to improve are welcome. +API Notation is a language-agnostic notation to share the public API of components in code. It was created to standardize software specification documents in teams that need to review code across several languages. +## Reference +The notation allows describing objects or modules, with properties, events and methods along with their types. ``` +// Anything after two forward slashes is a comment NameOfClass.WithPossibleNamespace + class property - instance property @@ -16,40 +19,38 @@ NameOfClass.WithPossibleNamespace <- dispatched events (instance) :: class method # instance method - +---- Other symbols => returns -->() callback return + #> throws [xx] optional data type - -Recommended order: class first, then sockets, then instance. Internally: Properties, events, methods. - -// Anything after two forward slashes is a comment -``` - -Here's an example of usage - -``` -HypotheticalModule - +staticProperty - +anotherStaticProperty - ::toggleAnotherStaticProperty() - ::setStaticProperty(newValue ) - -instanceProperty - -anotherInstanceProperty - #instanceMethodSync([optionalParameter]) => resultOfCall - #instanceMethodAsync(someValue , [callback] ) ->(error , result ) ``` -Here's another example but with events. +## Example +With this artificial example, you can see how to use it for more complex cases: ``` -EventHypotheticalClass - +>AnotherClass<+staticEventToListen(eventData ) - <+staticEventDispatched(someData ) - ~>listenedSocketEvent(eventData ) - <~dispatchedSocketEvent(eventData ) - ->AnotherClass<-instanceEventToListen(eventData ) - <-instanceEventDispatched(specificDataType ) +// Definitions start with object / module / class names, with namespaces +// separated by periods. Types are marked between angular brackets. +Definitions.Models.Post + // Properties. + +static_property <Type> + -instance_property <Types<Can<Be<Nested>>>> + // Methods. Parameters are listed in parentheses, and comma separated. + // Optional values are inside brackets + // => defines return values + // #> defines thrown exceptions, can be comma separated. + ::static_methods(parameter_label <Type>) => ReturnValueType #> BadTimesException,UnknownError + #update(text <String>, [options] <GlobalOptions.tOptions>) => Promise<Void> + // Function types can include parameter lists, returns and throws as well. + #transform<T>( Function<T>(payload <T>) => <T>, announce <Bool>) => <Bool> + // Listened Events + +>static_listener(parameters_expected <Bool>) + ->instance_listener() + ~>network_events(peer <Networking.Peer>) + // Emitted Events + <+emitted_statically(payload <StaticEventPayload>) + <-emitted_by_instance(reason <String>, code <Int>) + <~emitted_through_network(text <String>) ```