Both Service and Operation presented in the article use EnsLib.PubSub.PubSubOperation to get subscribers.

Here's getting a list of emails by domain and topic:

/// Get email addresses by domain and topic.
Method determineEmails(domain As %String, topic As %String) As %List
{
    set subRequest = ##class(EnsLib.PubSub.Request).%New()
    set subRequest.Topic = topic
    set subRequest.DomainName = domain    
    
    do ..SendRequestSync(..SubscriptionBO, subRequest, .subResponse,, "Get subscribers for domain: " _ domain _ ", topic: " _ topic)
    
    set mails = ""
    for i=1:1:subResponse.TargetList.Count() {
        #dim target As EnsLib.PubSub.Target
        set target = subResponse.TargetList.GetAt(i)
        set mails = mails _ $lb(target.Address)    
    }
    return mails
}

You need to add POST route:

Class Rest.UsuarioSvc Extends %CSP.REST
{

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/Oi/:xpto" Method="GET" Call="Oi"/>
<Route Url="/Oi/:xpto" Method="POST" Call="Oi"/>
</Routes>
}

ClassMethod Oi(xpto As %String) As %Status
{
    Set tSC = $$$OK
    
    If 'tSC Quit tSC       
    Set tProxy = ##class(%ZEN.proxyObject).%New()
    Set tProxy.Oi = xpto _ "1234"
    
    Set %response.ContentType = "application/json"
    set %response.Status = 200
    Do tProxy.%ToJSON()
    
    Quit tSC
}

}

I'd try to avoid giving user an ability to enter arbitrary code.

1. Offer user a list of predefined operations ( >,<,=,<> or Equals,More, Not Equals,...)

2. Get input from user.

3. Check that input is actually one option on a list and not something else. 

4. Perform the check using IF, for example.

 ClassMethod main(a As %Integer, b As %Integer, operation As %String(VALUELIST="Equals,Not Equals") = "Equals") As %Boolean
{
  set operationList = $lb("Equals", "Not Equals")
  throw:'$lf(operationList, operation) ##class(%Exception.General).%New("<INVALID OPERATION>")
 
  if operation = "Equals" {
    set result = (a = b)
  } elseif operation = "Not Equals" {
    set result = (a '= b)
  } else {
    throw ##class(%Exception.General).%New("<INVALID OPERATION>")
  }
 
  quit result
}

Made an erro in URL, it's not  .../db/DBName/Propname but .../prop/db/DBName/Propname.

Here's a sample code that creates a db and a property.

import requests

def getBaseUrl(host = "127.0.0.1", port = 52773,  namespace = "user", db = "test"):
    return "http://{}:{}/api/docdb/v1/{}/db/{}" .format(*[host, port, namespace, db])

def getPropertyUrl(property, host = "127.0.0.1", port = 52773,  namespace = "user", db = "test"):
    return "http://{}:{}/api/docdb/v1/{}/prop/{}/{}" .format(*[host, port, namespace, db, property])

def main():

    url = getBaseUrl()
    print(url)
    header = {
        'Content-Type': 'application/json',
    }

    session = requests.Session()
    session.auth = ("_SYSTEM", "SYS")

    response = session.get(url, headers=header)
    #response = requests.get(url, headers=header)
    print(response.status_code)  # Number of error

    if response.status_code == 404:
        print('DB not found, create DB ...')
        response = session.post(url, headers=header)
        print(response.status_code)
    elif response.status_code != 200:
        print('Unknown error: ' + response.status_code + ' ' + response.reason)
    else:
        property = "Ergebniszuf"
        # check that property exist
        response = session.get(getPropertyUrl(property), headers=header)

        if response.status_code == 404:
            print('Property not found, creating property: ' + property)
            response = session.post(getPropertyUrl(property), params= {"type":"%Numeric", "path": property, "unique":0}, headers=header)
            print(response)
        elif response.status_code != 200:
            print('Unknown error: ' + response.status_code + ' ' + response.reason)
        else:

            print('DB found, load data...')

    return 1


if __name__ == '__main__':
    print(main())