Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

DRAFT

Summary

This documents the implementation of one operation of the groups API.  There is a reference implementation server which makes it easy to implement the FIFER protocol.

hasMember operation

Note: this is similar to what we already discussed, though as it was implemented, things were tweaked.  Of course we should discuss the discrepancies :)
This is an outline of the object model.  Each FIFER transport (REST, POX, POJ, SOAP) uses this object model.

Input:

  • GroupHasMemberRequest
    • groupLookup : GroupLookup
      • handle: String
      • id: String
    • immediacy : String (immediate, nonimmediate, any[default])
    • subjectLookup : SubjectLookup
      • handle: String
      • id: String
      • idOrHandle: String
      • subjectSource: String

Output:

  • GroupHasMemberResponse
    • hasMember
    • responseMetadata: ResponseMetadata
      • errorText: String
      • protocolVersion: String
      • requestId: String
      • resultCode: Sring
      • serverMillis: int
      • serverType: String
      • serverVersion: String
      • success: boolean
      • warnings: String

SOAP

This is the CXF WSDL from the service interface

<?xml version='1.0' encoding='UTF-8'?>
<wsdl:definitions name="fiferService_v0_1"
    targetNamespace="http://ws_v0_1.fiferServer.fifer.jasig.org/"
    xmlns:ns1="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://ws_v0_1.fiferServer.fifer.jasig.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <wsdl:types>
        <xs:schema elementFormDefault="unqualified"
            targetNamespace="http://ws_v0_1.fiferServer.fifer.jasig.org/"
            version="1.0" xmlns:tns="http://ws_v0_1.fiferServer.fifer.jasig.org/"
            xmlns:xs="http://www.w3.org/2001/XMLSchema">
            <xs:element name="hasMember" type="tns:hasMember" />
            <xs:element name="hasMemberResponse" type="tns:hasMemberResponse" />
            <xs:complexType name="hasMember">
                <xs:sequence>
                    <xs:element minOccurs="0" name="groupLookup" type="tns:groupLookup" />
                    <xs:element minOccurs="0" name="subjectLookup" type="tns:subjectLookup" />
                    <xs:element minOccurs="0" name="immediacy" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="groupLookup">
                <xs:sequence>
                    <xs:element minOccurs="0" name="handle" type="xs:string" />
                    <xs:element minOccurs="0" name="id" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="subjectLookup">
                <xs:sequence>
                    <xs:element minOccurs="0" name="handle" type="xs:string" />
                    <xs:element minOccurs="0" name="id" type="xs:string" />
                    <xs:element minOccurs="0" name="idOrHandle" type="xs:string" />
                    <xs:element minOccurs="0" name="subjectSource" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="hasMemberResponse">
                <xs:sequence>
                    <xs:element minOccurs="0" name="return"
                        type="tns:groupHasMemberResponse" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="groupHasMemberResponse">
                <xs:sequence>
                    <xs:element name="hasMember" type="xs:boolean" />
                    <xs:element minOccurs="0" name="responseMetadata" type="tns:responseMetadata" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="responseMetadata">
                <xs:sequence>
                    <xs:element minOccurs="0" name="errorText" type="xs:string" />
                    <xs:element minOccurs="0" name="protocolVersion" type="xs:string" />
                    <xs:element minOccurs="0" name="requestId" type="xs:string" />
                    <xs:element minOccurs="0" name="resultCode" type="xs:string" />
                    <xs:element name="serverMillis" type="xs:int" />
                    <xs:element minOccurs="0" name="serverType" type="xs:string" />
                    <xs:element minOccurs="0" name="serverVersion" type="xs:string" />
                    <xs:element name="success" type="xs:boolean" />
                    <xs:element minOccurs="0" name="warnings" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <wsdl:message name="hasMember">
        <wsdl:part element="tns:hasMember" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:message name="hasMemberResponse">
        <wsdl:part element="tns:hasMemberResponse" name="parameters">
        </wsdl:part>
    </wsdl:message>
    <wsdl:portType name="FiferGroupService">
        <wsdl:operation name="hasMember">
            <wsdl:input message="tns:hasMember" name="hasMember">
            </wsdl:input>
            <wsdl:output message="tns:hasMemberResponse" name="hasMemberResponse">
            </wsdl:output>
        </wsdl:operation>
    </wsdl:portType>
    <wsdl:binding name="fiferService_v0_1SoapBinding" type="tns:FiferGroupService">
        <soap:binding style="document"
            transport="http://schemas.xmlsoap.org/soap/http" />
        <wsdl:operation name="hasMember">
            <soap:operation soapAction="" style="document" />
            <wsdl:input name="hasMember">
                <soap:body use="literal" />
            </wsdl:input>
            <wsdl:output name="hasMemberResponse">
                <soap:body use="literal" />
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="fiferService_v0_1">
        <wsdl:port binding="tns:fiferService_v0_1SoapBinding" name="FiferGroupServiceImplPort">
            <soap:address location="http://localhost:8090/fiferServer/services/group_v0_1" />
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

Sample request:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<ns2:hasMember xmlns:ns2="http://ws_v0_1.fiferServer.fifer.jasig.org/">
			<groupLookup>
				<handle>someHandle</handle>
			</groupLookup>
			<subjectLookup>
				<id>someId</id>
			</subjectLookup>
		</ns2:hasMember>
	</soap:Body>
</soap:Envelope>

Sample response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
	<soap:Body>
		<ns2:hasMemberResponse xmlns:ns2="http://ws_v0_1.fiferServer.fifer.jasig.org/">
			<return>
				<hasMember>true</hasMember>
			</return>
		</ns2:hasMemberResponse>
	</soap:Body>
</soap:Envelope>

REST

This is like POJ/POX but has a simplified request interface

Method

GET

URL

/groups/<groupid>/members/<memberid>[?immediacy=<immediacy>]

Request Body

None

Response:

{
  "groupHasMemberResponse":{
    "hasMember":true,
    "responseMetadata":{
      "protocolVersion":"v0.1.0",
      "requestId":"abcd123412345678909",
      "resultCode":"SUCCESS",
      "serverMillis":123,
      "serverType":"FIFER reference server",
      "serverVersion":"v0.5.0",
      "success":true
    }
  }
}

  • No labels