2017-01-26 5 views
0

У меня есть расширение ресурса отдыха, где я указываю типы параметров. Но я заметил, что параметры, которые я получаю в моем POST или GET, имеют не тот же тип, что и параметр введите my metadata.xml .. Все они - xs: string. Но когда я смотрю на API-интерфейс поиска, он выполняет оценки типов параметров. Я копал немного глубже, и я заметил, что в /MarkLogic/rest-api/endpoints/config.xqyget-rsrc-list-query-rule() не получает мои правила метаданных, которые я указал в metadata.xml, но вне-поле поиска REST API, это получить правильные правила ..Расширение ресурса Marklogic Rest not honoring metadata.xml

declare function conf:get-rsrc-list-query-rule() as element(rest:request) { 
    <rest:request 
      allow-post-alias="true" 
      fast-match="/*/config/resources" 
      uri="^/(v1|get-rsrc-list-query-ruleLATEST)/config/resources/?$" 
      endpoint="/MarkLogic/rest-api/endpoints/resource-list-query.xqy"> 
     <rest:http method="GET"> 
      <rest:param name="format" required="false" values="json|xml"/> 
      <rest:param name="refresh" required="false" as="boolean"/> 
     </rest:http> 
    </rest:request> 
}; 

в то время как для вне поиска окно REST API, правильные правила направляются

declare function conf:get-search-query-request-rule() as element(rest:request) { 
    <rest:request 
      allow-post-alias="true" 
      fast-match="/*/search" 
      uri="^/(v1|LATEST)/search(/)?$" 
      endpoint="/MarkLogic/rest-api/endpoints/search-list-query.xqy" 
      user-params="allow-dups"> 
     <rest:http method="GET"> 
      <rest:param name="q" required="false"/> 
      <rest:param name="format" required="false" values="json|xml"/> 
      <rest:param name="start" as="unsignedLong" required="false"/> 
      <rest:param name="pageLength" as="unsignedLong" required="false"/> 
      <rest:param name="category" required="false" repeatable="true" 
       values="content|metadata|{string-join(docmodcom:list-metadata-categories(),"|")}"/> 
      <rest:param name="options" as="string" required="false"/> 
      <rest:param name="collection" as="string" required="false" repeatable="true"/> 
      <rest:param name="directory" as="string" required="false" repeatable="false"/> 
      <rest:param name="view" as="string" values="metadata|results|facets|all|none"/> 
      <rest:param name="txid" as="string" required="false"/> 
      <rest:param name="database"  required="false"/> 
      <rest:param name="transform" required="false"/> 
      <rest:param name="structuredQuery" required="false"/> 
      <rest:auth> 
       <rest:privilege>http://marklogic.com/xdmp/privileges/rest-reader</rest:privilege> 
       <rest:kind>execute</rest:kind> 
      </rest:auth> 
     </rest:http> 
     <rest:http method="POST"> 
      <rest:param name="q" required="false"/> 
      <rest:param name="format" required="false" values="json|xml"/> 
      <rest:param name="category" required="false" repeatable="true" 
       values="content|metadata|{string-join(docmodcom:list-metadata-categories(),"|")}"/> 
      <rest:param name="start" as="unsignedLong" required="false"/> 
      <rest:param name="pageLength" as="unsignedLong" required="false"/> 
      <rest:param name="options" as="string" required="false"/> 
      <rest:param name="collection" as="string" required="false" repeatable="true"/> 
      <rest:param name="directory" as="string" required="false" repeatable="false"/> 
      <rest:param name="view" as="string" values="metadata|results|facets|all|none"/> 
      <rest:param name="txid" as="string" required="false"/> 
      <rest:param name="database"  required="false"/> 
      <rest:param name="transform" required="false"/> 
      <rest:content-type>text/xml</rest:content-type> 
      <rest:content-type>text/json</rest:content-type> 
      <rest:content-type>application/xml</rest:content-type> 
      <rest:content-type>application/json</rest:content-type> 
      <rest:auth> 
       <rest:privilege>http://marklogic.com/xdmp/privileges/rest-reader</rest:privilege> 
       <rest:kind>execute</rest:kind> 
      </rest:auth> 
     </rest:http> 
     <rest:http method="HEAD"/> 
     <rest:http method="OPTIONS"/> 
    </rest:request> 
}; 

I подумал, когда я укажу свои типы параметров, ресурс rest api будет принудительно применять типы, иначе это вызовет ошибку, но это не так. Это происходит с использованием готового дополнения api ,

Я не понимаю этого права? У меня все получилось? Как рассказать остальное расширение ресурсов для соблюдения моих типов параметров, указанных в моем метаданных.xml

+1

Можете ли вы подробнее рассказать, какую версию MarkLogic вы работаете (точно), и как вы разместили ваш расширение отдыха? – grtjn

+0

ML версия '8.0-5.4', и я развертываю с использованием ml-gradle. Я вижу свой« metadata.xml »в'/marklogic.rest.resource/crSearch/assets/metadata.xml' – Ravi

ответ

1

Метаданные - это дополнительная информация о расширении службы ресурсов, которую вы можете узнать, чтобы узнать, какие расширения доступны.

документация говорит об этом так:.

«Если сервис расширения ожидает параметров, вы можете по желанию„декларировать“параметры с использованием параметров запроса при установке расширения Этой информации метаданные, которые могут быть возвращены в GET запрос/config/resources. Он не используется для проверки параметров запросов на расширение. "

http://docs.marklogic.com/guide/rest-dev/extensions#id_59112

«MarkLogic Сервер возвращает сводку установленных расширений в XML или JSON .... Количество доступной информации о данном расширении зависит от объема метаданных, предоставленного во время установки расширения.»

http://docs.marklogic.com/guide/rest-dev/extensions#id_73853

Вы можете привести строку к любому типу в расширении, например, с помощью вызова хз: Int() или хз: двойной().

Надеясь, что помогает,

Смежные вопросы