以下を参考に、カスタムRESTリソースを作成しました。
https://www.drupal.org/docs/drupal-apis/restful-web-services-api/custom-rest-resources
上記の記事の通り進めることで、以下のURLから、JSONの結果を得ることができました。
/demo_rest_api/demo_resource
{ } " m e s s a g e " : " H e l l o , t h i s i s a r e s t s e r v i c e "
REST UIモジュール# 上記の記事において、以下の記載がありました。
If you are using the REST UI contrib module, you should now be able to see it in the list of available endpoints and you should be able to configure the GET method.
この点については、以下の記事を参考に、REST UIモジュールを有効化しました。
https://www.studio-umi.jp/blog/12/357
IIIF Presentation APIの試作# 次に、コンテンツ毎にJSON作成に取り組みます。具体的には、/iiif/3/{id}/manifestというパスにアクセスすると、IIIF Presentation API v3 に基づく情報を出力するようにしてみます。
以下の記事が参考になりました。
https://medium.com/drupaljournal/create-custom-rest-resource-for-get-and-post-method-in-drupal-8-e445330be3ff
以下のようなファイルを作成します。以下の例では、とりあえず$nodeからtitleを取得しています。これを応用することで、他のフィールドの情報も取得することができそうです。
< n u u u u c } ? a s s s s l p m e e e e a p } h e A @ s u p s D D D D n R s b i } r p r r r r n e i l u } R o @ l f e a u u u u o s d a r P e b p i $ i } r t c p p p p t t b i " r s j a N c ( n f e u e a a a a a R = e _ c e p e r o $ o $ ] $ i } r t r l l l l t e l p a s o c a d f i L d ( m ; r f e u n D \ \ \ \ i s " a n e n t m e u d o e $ a e $ t r r n n r r o o i = t o n d . n ) a n n s C ( r u n n u o o e e n u i h n t s $ i c d = o i " " " ] p o $ e r e p d d s s r i @ s i a i d t { d f @ t l o n r s n n w a e e t t f c f T c t t d . i n N e e c y a n f e p e l \ \ \ \ o e _ r = a i o o o o s o p b s i s o $ w R \ E N P R r ( p a l o n d d i t n e e " ] e g p n r e d n o l e r n { " n G e e n t " l n u o s e R s e t d u s g e s 3 E g : s = e " o = r n e s e o m i e g o e s l = T e : t x = n e s - p s u o t I i u t e a e t l a [ t > = e $ n e > o o r _ y n n r n t " x r ( o n " > " n e c a n u c r \ t \ c m t i / t e $ a c " o w a i d s r e e N e R e e a o i e q i d e = M [ = d c n d e c R s o r e R t t n i n u d ( o > a > e R h s C ; e e t d f s e h i ( i d e ) $ f n - e i t a R s _ e a o s o o " f s s i " i [ > s n a c e p a ; c u p d n I / t { d N h f g o g n h s o p e r o _ I 3 R s ) o t e e u c e p n i ; c n 3 I / e . ; d t s t r f e a o s \ e s " F { s e p t ( c o o b n e P B e , i o I I : " " e r f l s ( l a ; P d u t n / , t R e e ' u s r } r t / i e r C D ( A g e e / c w e i t s e a e ' r i ; s m e i r i l p s c p A t n e a B l f i e o u h e r i \ n n a l a f " n l e n t c r t i s c . ) s t a d i l e a f e r e i [ e s b e c e s t e e ) o 0 ( l n l t i s { t / ] $ e c e I \ o t u { a - m R y d r n " r p > a e ( d e n i g n s $ o i s A / e i p n e s o P s p t f o o s u I e r ( e n d n r r r e " s s e \ e c v i s v t e ) ' q e 3 a e a ) I ; t u ; " l n l ; n i ) i t u t e r , z a e e x e e t " r i d i ) f s ' j o - a t , s n > c ' o / g e , 4 n 3 e ) 0 / t 4 0 f c V { 0 ) o o a 0 ; r n l ) m t u ; a e e t x ( t ) o . f j s n o o n d " e , パーミッションの許可# 以下のページで、Anonymous userにチェックを入れて、外部からのアクセスを許可します。
/admin/people/permissions#module-rest
結果、/iiif/3/5070/manifestのようなURLにアクセスすることで、非ログインユーザでも、以下のようなjsonファイルを取得することができました。
{ } " " " } @ t l c y a " ] o p b n n e e o " t " l n 中 e : " e 村 x : " 覚 t " : " " M { : a [ n " i h f t e t s p t : " / , / i i i f . i o / a p i / p r e s e n t a t i o n / 3 / c o n t e x t . j s o n " ,
まとめ# DrupalでカスタムRESTリソースを作成する一例を紹介しました。カスタムリソースを作成する際の参考になりましたら幸いです。
また引き続きIIIF Presentation APIに関する実装を進めて、Omeka SのIIIF Server と同様のモジュールを作成したいと思います。