X-Git-Url: https://git.r.bdr.sh/rbdr/r.bdr.sh/blobdiff_plain/b0ca5dae576c4b0fae7f1ce2727e9a3605808794..bfaa66583b3210ad6da796a26f20e601c03275e4:/api.gmi diff --git a/api.gmi b/api.gmi index 3e48607..d0d99ad 100644 --- a/api.gmi +++ b/api.gmi @@ -2,9 +2,10 @@ --- description: 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. ``` +// Anything after two forward slashes is a comment NameOfClass.WithPossibleNamespace + class property - instance property @@ -16,40 +17,45 @@ 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 +Recommended order: class first, then sockets, then instance. Internally: +Properties, events, methods. ``` -Here's an example of usage +Or, with some examples: ``` -HypotheticalModule - +staticProperty - +anotherStaticProperty - ::toggleAnotherStaticProperty() - ::setStaticProperty(newValue ) - -instanceProperty - -anotherInstanceProperty - #instanceMethodSync([optionalParameter]) => resultOfCall - #instanceMethodAsync(someValue , [callback] ) ->(error , result ) +// Definitions start with object / module / class names, with namespaces +// separated by periods. Types are marked between angular brackets. +Definitions.Models.Post + // Properties. + +static_property + -instance_property >>> + // 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 ) => ReturnValueType #> BadTimesException,UnknownError + #update(text , [options] ) => Promise + // Listened Events + +>static_listener(parameters_expected ) + ->instance_listener() + ~>network_events(peer ) + // Emitted Events + <+emitted_statically(payload ) + <-emitted_by_instance(reason , code ) + <~emitted_through_network(text ) ``` -Here's another example but with events. +When defining function types, you may use parameter lists, returns and throws notation as well. ``` -EventHypotheticalClass - +>AnotherClass<+staticEventToListen(eventData ) - <+staticEventDispatched(someData ) - ~>listenedSocketEvent(eventData ) - <~dispatchedSocketEvent(eventData ) - ->AnotherClass<-instanceEventToListen(eventData ) - <-instanceEventDispatched(specificDataType ) +HypotheticalModule + #transform( Function(payload ) => , announce ) => ```